我使用没有MSYS的MinGW64(Windows 7),我遇到以下问题:
我有一个用C99编写的dll,它必须带有.mexw64后缀,以便Matlab可以使用它。我希望能够动态链接这个dll形成另一个dll(mexw64),但gcc不允许我直接链接。我无法进行静态链接,因为这两个dll都有许多同名的函数,可以通过在创建共享库时不导出符号来隐藏它们。
到目前为止,我已经尝试过:
我的问题是,这是否正确/足够安全?还有其他选择吗?
感谢您的评论。
答案 0 :(得分:1)
您应该构建一个正确的implib,作为链接器输出或来自.def。
链接:
$ gcc -shared -o testimpl.mexw64 testimpl.c -Wl,--out-implib,libtestimpl.a
$ dlltool -I libtestimpl.a
testimpl.mexw64
或create a .def file,指定明确的LIBRARY
:
$ cat testimpl.def
LIBRARY testimpl.mexw64
EXPORTS
test @1
$ dlltool -d testimpl.def -l libtestimpl.a
$ dlltool -I libtestimpl.a
testimpl.mexw64
最后,链接东西:
$ gcc -o test.exe test.c libtestimpl.a
# or
$ gcc -o test.exe test.c -L. -ltestimpl
$ grep testimpl.mexw64 test.exe
Binary file test.exe matches