<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    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:<br>
    <br>
    Severity    Code    Description    Project    File    Line   
    Suppression State<br>
    Error    C3861    'visibility': identifier not found    prjTest4   
    c:\users\hudecekp\documents\visual studio
    2017\projects\sdk-test\prjtest4\pxcapi.h    140    <br>
    Severity    Code    Description    Project    File    Line   
    Suppression State<br>
    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    <br>
    Severity    Code    Description    Project    File    Line   
    Suppression State<br>
    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    <br>
    <br>
    případně ještě:<br>
    Severity    Code    Description    Project    File    Line   
    Suppression State<br>
    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    <br>
    Severity    Code    Description    Project    File    Line   
    Suppression State<br>
    Error    C2374    '__attribute__': redefinition; multiple
    initialization    prjTest4    c:\users\hudecekp\documents\visual
    studio 2017\projects\sdk-test\prjtest4\pxcapi.h    143    <br>
    Severity    Code    Description    Project    File    Line   
    Suppression State<br>
    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    <br>
    a ty všechny odkazují na začátek:<br>
    <font face="Courier New, Courier, monospace">PXCAPI int pxcExit();</font><br>
    <br>
    a tyto skupiny errorů se střídají.<br>
    <br>
    PH<br>
    <br>
    <br>
    <div class="moz-cite-prefix">Dne 15.02.2022 v 17:35 Pavel Hudeček
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:e9790267-7ddc-1ff6-c67f-a92e5affef04@seznam.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      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.<br>
      <br>
      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.<br>
      <br>
      Teď teda co je za problém ve VS při při 64b, s funkcemi
      deklarovanými:<br>
      <font face="Courier New, Courier, monospace">#define PXCAPI extern
        "C" __attribute__ ((visibility("default")))<br>
        PXCAPI int pxcInitialize(int argc = 0, char const* argv[] =
        NULL);<br>
      </font><br>
      error:<br>
      Severity    Code    Description    Project    File    Line   
      Suppression State<br>
      Error (active)    E0260    explicit type is missing ('int'
      assumed)    prjTest4    C:\Users\hudecekp\Documents\Visual Studio
      2017\Projects\sdk-test\prjTest4\pxcapi.h    140    <br>
      ukazující na začátek řádku, tedy před PXCAPI<br>
      a další error:<br>
      Severity    Code    Description    Project    File    Line   
      Suppression State<br>
      Error (active)    E0065    expected a ';'    prjTest4   
      C:\Users\hudecekp\Documents\Visual Studio
      2017\Projects\sdk-test\prjTest4\pxcapi.h    140    <br>
      ukazující před int.<br>
      <br>
      PH<br>
      <br>
      <div class="moz-cite-prefix">Dne 15.02.2022 v 16:57 Miroslav Šinko
        napsal(a):<br>
      </div>
      <blockquote type="cite"
cite="mid:CAAo4E4izS+WeZ3WP6D8ZtahMzqkKzznPOP2MKVRLR1gX6igALw@mail.gmail.com">
        <pre class="moz-quote-pre" wrap="">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 <a class="moz-txt-link-rfc2396E" href="mailto:edizon@seznam.cz" moz-do-not-send="true"><edizon@seznam.cz></a> napísal(a):
</pre>
        <blockquote type="cite">
          <pre class="moz-quote-pre" wrap="">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.
</pre>
        </blockquote>
      </blockquote>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>