Re: Problémy s DLL a LIB ve VS2017

Pavel Hudeček edizon na seznam.cz
Úterý Únor 15 17:46:55 CET 2022


Jo a pak jsem si všiml, že po seznamu všech dvojic E0260+E0065 následuje 
seznam trojic, všechny s odkazem na začátek řádků, před PXCAPI:

Severity    Code    Description    Project    File    Line Suppression State
Error    C3861    'visibility': identifier not found    prjTest4 
c:\users\hudecekp\documents\visual studio 
2017\projects\sdk-test\prjtest4\pxcapi.h    140
Severity    Code    Description    Project    File    Line Suppression State
Error    C4430    missing type specifier - int assumed. Note: C++ does 
not support default-int    prjTest4 c:\users\hudecekp\documents\visual 
studio 2017\projects\sdk-test\prjtest4\pxcapi.h    140
Severity    Code    Description    Project    File    Line Suppression State
Error    C2448    '__attribute__': function-style initializer appears to 
be a function definition    prjTest4 c:\users\hudecekp\documents\visual 
studio 2017\projects\sdk-test\prjtest4\pxcapi.h    140

případně ještě:
Severity    Code    Description    Project    File    Line Suppression State
Error    C4430    missing type specifier - int assumed. Note: C++ does 
not support default-int    prjTest4 c:\users\hudecekp\documents\visual 
studio 2017\projects\sdk-test\prjtest4\pxcapi.h    143
Severity    Code    Description    Project    File    Line Suppression State
Error    C2374    '__attribute__': redefinition; multiple 
initialization    prjTest4    c:\users\hudecekp\documents\visual studio 
2017\projects\sdk-test\prjtest4\pxcapi.h    143
Severity    Code    Description    Project    File    Line Suppression State
Error    C2448    '__attribute__': function-style initializer appears to 
be a function definition    prjTest4 c:\users\hudecekp\documents\visual 
studio 2017\projects\sdk-test\prjtest4\pxcapi.h    143
a ty všechny odkazují na začátek:
PXCAPI int pxcExit();

a tyto skupiny errorů se střídají.

PH


Dne 15.02.2022 v 17:35 Pavel Hudeček napsal(a):
> No on ten #if pro win32 bude artefakt z dávné doby, teď se to buildí 
> jen v 64b a mnou používané DLL je 64b, takže momentálně nemá smysl se 
> zabývat tím co vzniklo, když jsem omylem buildil 32b.
>
> A důležité je, že stejné fajly C, H, DLL a LIB fungují při použití 
> Cmake a též fungují při použití v QT, jen s přidáním LIB do projektu a 
> tam fungují při všech metodách překladu, tedy cmake/VS, qmake/VS i 
> mingw. Tzn. všechny 4 fajly jsou v pořádku, jen není správně nastaven 
> projekt ve VS.
>
> Teď teda co je za problém ve VS při při 64b, s funkcemi deklarovanými:
> #define PXCAPI extern "C" __attribute__ ((visibility("default")))
> PXCAPI int pxcInitialize(int argc = 0, char const* argv[] = NULL);
>
> error:
> Severity    Code    Description    Project    File    Line Suppression 
> State
> Error (active)    E0260    explicit type is missing ('int' assumed)    
> prjTest4    C:\Users\hudecekp\Documents\Visual Studio 
> 2017\Projects\sdk-test\prjTest4\pxcapi.h    140
> ukazující na začátek řádku, tedy před PXCAPI
> a další error:
> Severity    Code    Description    Project    File    Line Suppression 
> State
> Error (active)    E0065    expected a ';'    prjTest4 
> C:\Users\hudecekp\Documents\Visual Studio 
> 2017\Projects\sdk-test\prjTest4\pxcapi.h    140
> ukazující před int.
>
> PH
>
> Dne 15.02.2022 v 16:57 Miroslav Šinko napsal(a):
>> 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 bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20220215/77de44aa/attachment.htm>


Další informace o konferenci Hw-list