Ik probeer nu al een tijdje om een dll gemaakt met gcc (mingw) te laten samenwerken met MSVC (2008).
Tot op heden geen succes.
Volgens de mingw.org site is het allemaal erg simpel:
Ik gebruik de volgende testbestanden:
aapje.h
aapje.cpp
main.cpp
Dus probeerde ik als volgt:
Dit gaat prima, maar zodra ik dan met MSVC wil gaan compileren:
krijg ik het volgende te horen:
maar ook als ik /EHsc op de laatste commandline specificeer blijf ik deze unresolved external symbol error krijgen.
Ik hoop dat een van jullie mij hier verder kan helpen
Tot op heden geen succes.
Volgens de mingw.org site is het allemaal erg simpel:
kan niet misgaan zou je denken, maar helaas vindt MSVC dat dit niet grappig is en geeft aan dat hij de functie niet kan resolven.How can an MSVC program call a MinGW DLL, and vice versa?
Assume we have a testdll.h, testdll.c, and testmain.c. In the first case, we will compile testdll.c with MinGW, and let the MSVC-compiled testmain call it. You should use
gcc -shared -o testdll.dll testdll.c \
-Wl,--output-def,testdll.def,--out-implib,libtestdll.a
to produce the DLL and DEF files. MSVC cannot use the MinGW library, but since you have already the DEF file you may easily produce one by the Microsoft LIB tool: lib /machine:i386 /def:testdll.def
Once you have testdll.lib, it is trivial to produce the executable with MSVC:
cl testmain.c testdll.lib
Ik gebruik de volgende testbestanden:
aapje.h
C++:
1
2
3
4
5
6
7
8
| #ifndef __AAPJE_H_ #define __AAPJE_H_ #define EXPORT __declspec(dllexport) EXPORT int geefMijDrie(); #endif |
aapje.cpp
C++:
1
2
3
4
5
| #include "aapje.h" int geefMijDrie() { return 3; } |
main.cpp
C++:
1
2
3
4
5
6
7
8
9
| #include "aapje.h" #include <iostream> int main( int argc, char **argv ) { std::cout << geefMijDrie() << std::endl; return 0; } |
Dus probeerde ik als volgt:
g++.exe aapje.cpp -o aapje.dll -shared -Wl,--output-def,aapje.def,--out-impli b,libaapje.a
lib /def:aapje.def
Dit gaat prima, maar zodra ik dan met MSVC wil gaan compileren:
cl main.cpp c:\src\dlltest\aapje.lib /I c:\src\dlltest
krijg ik het volgende te horen:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. main.cpp C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\xlocale(342) : warning C 4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved. /out:main.exe main.obj c:\src\dlltest\aapje.lib main.obj : error LNK2019: unresolved external symbol "int __cdecl geefMijDrie(vo id)" (?geefMijDrie@@YAHXZ) referenced in function _main main.exe : fatal error LNK1120: 1 unresolved externals
maar ook als ik /EHsc op de laatste commandline specificeer blijf ik deze unresolved external symbol error krijgen.
Ik hoop dat een van jullie mij hier verder kan helpen
oprecht vertrouwen wordt nooit geschaad