我已经用c++中的cmake生成了一个动态库。如果没有库的.h或.cpp文件,我如何在另一个c++项目中使用它。我只有.dll文件。
至少有两种方法:
- 从.dll文件生成.lib/.def(或其他文件(,并将它们用于宿主应用程序。您可以看到implib、mkexp等实用程序
- 使用API:LoadLibrary进行加载,使用GetProcAddress获取函数指针。有c++包装:请参阅boost::dll::import_alias
当您提到dll
时,我假设您在Windows平台上。您可以使用dumpbin /exports someLib.dll
等工具列出dll
导出的函数,然后使用GetProcAddress
创建指向这些函数的函数指针。
如果你需要更复杂的东西,比如使用C++类型,这可能会变得更复杂,甚至不可能,因为你需要链接到标准库的确切版本、编译器版本和编译器标志。
例如,如果dll
中有函数void myFunction(const std::string&)
,则必须确保可执行文件中的std::string
与dll
中的函数二进制兼容。如果它们不是二进制兼容的,您将很难找到并解决运行时错误。即使您有标题,这也适用,这就是像QT
这样的库提供相同dll
的多个版本的原因