Windows上的cmake链接共享库
有3个文件[m.c,m.h,main.c].
莫氏硬度 // m.h int m(); M.C // m.c #include <stdio.h> #include "m.h" int m(){ printf("Hello,m!n"); return 0; } main.c中 // main.c #include "m.h" int main(){ return m(); } 虽然我更喜欢共享库(m.dll),但我已经制作了CMakeLists.txt PROJECT("app1") ADD_LIBRARY(m SHARED m.c) ADD_EXECUTABLE(myexe main.c) TARGET_LINK_LIBRARIES(myexe m) 完成CMake配置并完成生成.打开app1.sln并使用Visual Studio构建,它崩溃了 LNK1104:Can't open file "Debugm.lib" 它仅在ADD_LIBRARY()中用作STATIC.为什么它不适用于Windows? 如果我有另一个共享库(mylib.dll),我怎么能在main.c和CMakeLists.txt文件中调用它的函数?
不同平台上的动态库链接之间存在差异,这也需要一些额外的代码.好消息是,CMake可以帮助您解决这个问题.我在
Gernot Klingler发现以下博客文章非常有用:
> Creating and using shared libraries with different compilers on different operating systems 简而言之,您需要为m.h中声明的内容定义一些“导出前缀”.否则,构建过程将不会生成用于静态链接名为m.lib的“导入库”(另请参阅 以下是您需要修改的代码: 莫氏硬度 #include "m_exports.h" int M_EXPORTS m(); M.C #include "m.h" #include <stdio.h> int m(){ printf("Hello,m!n"); return 0; } 的CMakeLists.txt cmake_minimum_required(VERSION 3.0) include(GenerateExportHeader) PROJECT("app1") INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") ADD_LIBRARY(m SHARED m.c m.h m_exports.h) GENERATE_EXPORT_HEADER(m BASE_NAME m EXPORT_MACRO_NAME M_EXPORTS EXPORT_FILE_NAME m_exports.h STATIC_DEFINE SHARED_EXPORTS_BUILT_AS_STATIC) ADD_EXECUTABLE(myexe main.c) TARGET_LINK_LIBRARIES(myexe m) 其他参考文献 > GenerateExportHeader宏 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何将Windows ACL映射到CIFS共享上的Linux ACL?
- wpf – 无法从程序集PresentationFramework加载类型’Syste
- windows – “Deny Logon Locally”效果
- Windows相当于linux cksum命令
- Windows 下单机最大TCP连接数
- windows-server-2012 – 在通过IIS 8.0运行Exchange 2013的
- windows – 挂钩线程创建/终止
- Windows 10中的信标
- Windows 8 – Windows 8上的Octave问题:任何错误后崩溃
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用