c++ - 我有一个使用 g++ 使用各种优化标志编译的 .dll,如何将它动态链接到我的应用程序?
问题描述
我在Windows上有一个.dll 库,我在命令行上使用mingw g++编译它并使用各种标志来优化它,但我需要将它链接到我的项目,以便运行编译的.exe需要.dll(到目前为止据我了解,这是隐式/动态链接)。这最初是一个macOS项目,所以我不知道如何将它链接到我的Visual Studio项目,因为我似乎需要一个 .lib 文件。
我创建.dll文件的方法是在 lib 文件夹内的 cmd 中输入此命令:
g++ -shared -DNDEBUG -IC:\Users\luis.lopez\Documents\libraries\eigen\ -march=native -ftree-vectorize -ffast-math -fstrict-aliasing -O3 -fomit-frame-pointer -fopenmp -o libfoo.dll foolibrary.cpp
有没有办法让我在维护这些编译标志的同时创建.lib 文件?
解决方案
您可以添加-Wl,--output-def,libfoo.def
以生成libfoo.def
. 然后你应该能够生成一个 MSVC.lib
文件,请参阅:如何从 DLL 生成导入库(LIB 文件)?
但是要正确移植到 Windows,您需要确保符号实际上是由库使用导出并由使用库的代码使用__declspec(dllexport)
导入__declspec(dllimport)
的,例如:linking between dllimport and dllexport
推荐阅读
- javascript - JSON.parse 不转换字符串化 JSON 数组
- javascript - fetch api 是否发生在主线程之外?如果发生在主线程上怎么不阻塞?
- html - 在火狐中,img是子元素,高度设置为100%,但是父元素的宽度是img原来的宽度
- mysql - 如何使用 SQL 查询生成测量曲线
- python - %timeit 输出因环境而异
- swift - CNContactPicker - 用户在使用搜索后无法选择联系人
- asp.net - System.Data.SqlClient.SqlException:''@Password' 附近的语法不正确。'
- javascript - Azure 认知服务 TTS:找不到资源
- angular - Angular @Input 在浏览器上不起作用并且组件不会呈现
- python - 为什么python中的self总是叫self,而不是另一个名字?