一共有三个文件(mc,mh和** main.c *)。
// m.h
int m();
// m.c
#include <stdio.h>
#include "m.h"
int m(){
printf("Hello,m!\n");
return 0;
}
// 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 "Debug\m.lib"
只能在上用作STATICADD_LIBRARY()
。为什么在Windows上不起作用?
如果我有另一个共享库(mylib.dll),如何在main.c和CMakeLists.txt文件中调用其功能?
在不同平台上的动态库链接之间存在差异,这也需要一些其他代码。好消息是,CMake可以帮助您。我发现Gernot Klingler的以下博客文章非常有用:
简而言之,您需要为中声明的内容定义一些“导出前缀” m.h
。否则,构建过程将不会生成用于静态链接named的“导入库” m.lib
(另请参见CMAKE_IMPORT_LIBRARY_SUFFIX
)。
这是需要修改的代码:
h
#include "m_exports.h"
int M_EXPORTS m();
mc
#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)
其他参考
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句