Re: Problémy s DLL a LIB ve VS2017

Miroslav Šinko sinkomiro na gmail.com
Úterý Únor 15 16:57:04 CET 2022


64bit verzia neviem, ale pri 32bit sa funkcie do dll kompiluju s prototypom
__declspec(dllexport)

A tie iste funkcie pre exe s
__declspec(dllimport)

T.j. v headri by som ocakaval nieco taketo:

#ifdef NAME_EXPORTS  //defined for DLL, not for exe
  #define NAME_API __declspec(dllexport)
#else
  #define NAME_API __declspec(dllimport)
#endif

Linker error pise unresolved external len meno funkcie, alebo je tam
pred menom funkcie import prefix?
__imp_?meno_funkcie

Ak tam nie je __imp_, tak vam ten __declspec(dllimport) chyba a linker
nenajde funkcie v import libke.

miro

ut 15. 2. 2022 o 16:25 Pavel Hudeček <edizon na seznam.cz> napísal(a):
>
> No všechny soubory, tedy zdroják pokusného programu, H, DLL a LIB jsou v obou případech stejné, ale s cmake (který používá VS) to funguje, kdežto z přímo ve VS ne.
>
> A ten cmake se pouští z bat:
> mkdir build
> cd build
> cmake -DCMAKE_GENERATOR_PLATFORM=x64 ..
> msbuild /P:Configuration=Release ALL_BUILD.vcxproj
> (a pak copy exe a DLL na místo kde se to spouští)
>
> Jo a pak jsem v tom VS zapnul x64, prvně jsem si nevšim že je zaplý x86.
>
> Výsledkem jsou jiný errory:
> Severity    Code    Description    Project    File    Line    Suppression State
> Error (active)    E0260    explicit type is missing ('int' assumed)
> A ty errory se odkazujou na všechny začátky deklarací funkcí v pxcapi.h
>
> Všechny jsou tohoto typu:
> PXCAPI int pxcRefreshDevices();
> a liší se až názvy a parametry
> přičemž nahoře je:
> #ifndef WIN32
>     #define PXCAPI extern "C" __attribute__ ((visibility("default")))
> #else
>     #define PXCAPI extern "C" __declspec(dllexport)
> #endif
>
> PH
>
> Dne 15.02.2022 v 16:03 Jindroush napsal(a):
>
> No a ten unresolved symbol v pxcore.lib urcite je, tj. presne ve stejnem tvaru, na ktery si linker stezuje?
> J.
>
> On 15.02.2022 15:53, Pavel Hudeček wrote:
>
> Dobrý den všem,
> mám konzolový program v C, který využívá DLL a LIB. Pro začátek by mi stačilo, kdyby to fungovalo v triviální verzi, kdy je DLL a LIB u zdrojáků.
>
> Pokud použiju cmake, funguje mi tento CMakeList.txt:
>
> cmake_minimum_required(VERSION 3.10)
> project(widepix2fd)
> add_library(pxcore SHARED IMPORTED)
> set_property(TARGET pxcore PROPERTY IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/pxcore.dll")
> set_property(TARGET pxcore PROPERTY IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/pxcore.lib")
> add_library(wpxTest.dll SHARED widepix2fd.cpp)
> target_link_libraries(widepix2fd pxcore)
>
> Jenže já bych to potřeboval rozchodit ve VS2017. Ale nedaří se mi v nastavení projektu zařídit, aby to fungovalo.
> V nastavení projektu All configurations / All Platforms jsem nastavil:
> Linker/Input/Additional Dependencies jsem přidal pxcore.lib
> Build Events/Post-Build Event/Command line jsem dal xcopy /y /d "*.dll" "$(OutDir)"
>
> Dostal jsem se do stavu, kdy to dělá errory LNK2001 unresolved external symbol a za tím název funkce doplněný o podtřžítko.
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list