cmake创建一个共享对象

San*_*kar 10 build cmake shared-libraries

我有三个文件:

lib.c lib.h =>它们应该构建为.so文件
client.c =>这应该构建为可执行文件.
在client.c中,我包含了lib.h文件,以获取lib.c下定义的函数的声明

有人能告诉我我应该使用的确切CMakeLists文件,以便源区域与Cmake的临时文件以及在单独的构建和二进制目录中生成的二进制文件和库(在我认为是Windows的情况下是.dll)一致吗?

小智 15

此解决方案不会创建一个.so文件,而是一个cmake等效项,以便进一步包含在cmake中.
我正在寻找一个解决方案,将提供相当于这个:

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o
Run Code Online (Sandbox Code Playgroud)

这将生成一个plugin_lib.so可以在运行时使用dlopen动态加载的.

该解决方案缺少"共享"选项,如下所示:

ADD_LIBRARY(mylib SHARED ${mylibSRCS})
Run Code Online (Sandbox Code Playgroud)

  • 接受的答案应更新 (2认同)

dun*_*can 12

默认情况下,Cmake 构建在单独的构建目录上(我没有测试这个例子):

PROJECT(myproject)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

SET(mylibSRCS lib.c)
SET(myprogSRCS client.c)

ADD_LIBRARY(mylib ${mylibSRCS})
ADD_EXECUTABLE(myprog ${myprogSRCS})

TARGET_LINK_LIBRARIES(myprog mylib)
Run Code Online (Sandbox Code Playgroud)

你做:

mkdir build
cd build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)

一切都在建设中。

更新:正如下面@chryss 提到的,如果你想生成 .so 文件,命令应该是:

ADD_LIBRARY(mylib SHARED ${mylibSRCS})
Run Code Online (Sandbox Code Playgroud)

  • `ADD_LIBRARY(mylib SHARED ${mylibSRCS})`,如下面@chryss 所述。 (3认同)