相关疑难解决方法(0)

如何使用cmake创建共享库?

我编写了一个库,我曾经使用自编写的Makefile进行编译,但现在我想切换到cmake.树看起来像这样(我删除了所有不相关的文件):

.
??? include
?   ??? animation.h
?   ??? buffers.h
?   ??? ...
?   ??? vertex.h
?   ??? world.h
??? src
    ??? animation.cpp
    ??? buffers.cpp
    ??? ...
    ??? vertex.cpp
    ??? world.cpp
Run Code Online (Sandbox Code Playgroud)

所以我要做的只是将源代码编译成共享库,然后使用头文件安装它.

我发现的大多数示例都使用一些共享库编译可执行文件,但从不只是一个普通的共享库.如果有人可以告诉我一个使用cmake的非常简单的库,那么我也可以使用它作为一个例子.

c++ compilation cmake shared-libraries

121
推荐指数
4
解决办法
14万
查看次数

CMake:如何在不重新编译源的情况下构建共享库和静态库

我想构建所描述的相同库的静态和共享版本是否有可能让CMake构建同一个库的静态和共享版本?

但是,源代码被编译两次,每个版本一个,这是不必要的.有什么方法可以避免这种情况吗?

目前我有:

add_library(${LIB} SHARED ${${LIB}_srcs})

add_library(${LIB}_static STATIC ${${LIB}_srcs})
Run Code Online (Sandbox Code Playgroud)

为了只需要编译一次,我需要更改什么?仅供参考.我有相同的编译器标志和定义.

compilation cmake

12
推荐指数
2
解决办法
1万
查看次数

如何使用cmake将编译器命令行args放在特定的地方

所以我正在用两个静态库构建一个共享库.

这个答案说这样做的方法是-Wl,--whole-archive在我的静态库之前插入,然后插入-Wl,--no-whole-archive它们.

那么我目前在cmake中为共享库提供的是:

add_library(wittyPlus SHARED empty.cpp)
target_link_libraries(wittyPlus 
    ${wtdbosqlite}
    ${WT_LIBRARIES}
    ${DB_LIBRARIES}
    ${Boost_LIBRARIES}
    app models
)
Run Code Online (Sandbox Code Playgroud)

所以,我需要的是为它加上-Wl,--whole-archive之前appmodels,然后-Wl,--no-whole-archive在他们之后(以标准库进口不要被共享库导出).

在CMake中最简单的方法是什么?


另外:所以我想尽可能多地使用标准的cmake东西,这样我就不需要为Windows构建做任何额外的工作,因为CMake会删除平台上不支持的编译器定义.建成.

gnu g++ cmake ld

9
推荐指数
1
解决办法
1万
查看次数

为LLVM libc ++ 3.3构建静态和共享库

libc++来自SVN 的最新LLVM 3.3附带一个CMakeLists.txt.我是一个CMake新手,但昨天我研究了足够能够libc++在RHEL 6.4 x86_64主机上建立结账.

另外,我能够添加足够的CPack相关命令CMakeLists.txt来生成一个libcxx-3.3.svn-0.el6.x86_64.rpm.但很可能由于是新手CMake,我无法同时构建静态和共享库.

是.我回顾是否有可能让CMake构建同一个库的静态和共享版本?.但是,add_library我不想使用和枚举所有源文件,而是想使用libc++'s CMakeList.txt- 使用的方法APPEND.

我可以通过替换ON下面的第40行来生成静态库,OFF以构建静态库

40  option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON)
41 
Run Code Online (Sandbox Code Playgroud)

或者我可以保持原样并构建一个共享库.

我还修改了以下几行,例如消除NOT或注释掉第232和233行.但无论我尝试什么,我似乎无法让静态库与共享库一起构建.

232  if (NOT LIBCXX_ENABLE_SHARED)
233    list(APPEND LIBCXX_CXX_FEATURE_FLAGS -D_LIBCPP_BUILD_STATIC)
234  endif()
Run Code Online (Sandbox Code Playgroud)

如何调整CMakeList.txt文件以便同时构建文件?

c++ cmake clang cpack libc++

5
推荐指数
1
解决办法
718
查看次数

编译动态链接库

我目前正在尝试使用Windows和MinGW编译动态链接库(用于插件系统).

我使用此命令行编译每个对象:

mingw-g++ -fPIC test.cpp
Run Code Online (Sandbox Code Playgroud)

和使用这一行的图书馆:

mingw-g++ -rdynamic -shared -Wl,-soname,test.so.1 -o test.so test.o

它根本不起作用(使用GCC与Linux,类似的线路工作):fPIC和rdynamic由于某种原因被忽略.在尝试创建库时,它失败了,因为编译器尝试将它与应该被解析的对象链接起来,因为我将它与主二进制文件动态链接.

那你怎么用MinGW编译呢?

谢谢 :) !

windows mingw

3
推荐指数
1
解决办法
2614
查看次数

How to create a static library (.a file) in Android Studio 3.2 with CMake

Now i create a new project include c++ support in Android Studio 3.2, it has native-lib.cpp naturally, the CMakeLists.txt looks like this:

add_library( # Sets the name of the library.
    native-lib

    # Sets the library as a shared library.
    SHARED

    # Provides a relative path to your source file(s).
    src/main/cpp/native-lib.cpp)
Run Code Online (Sandbox Code Playgroud)

now if i build this project, i can find libnative-lib.so in some "debug" directoies, that's OK, but i want static library ie .a files.

Change SHARED to STATIC won't generate …

java-native-interface android cmake static-libraries android-ndk

2
推荐指数
1
解决办法
3942
查看次数

如何使用 CMake 构建库

我正在开发一个相当大的 C++ 项目,我决定将源文件分成不同的模块,以便管理它们更容易一些。但是,我在使用 CMake 将文件链接在一起时遇到了问题。
所以我有两个库,都包含一些 .cpp 和 .h 文件以及一个 main.cpp 文件。该项目的目录结构如下所示:

root
  |-- library1
  |      |-- lib1.cpp
  |      |-- lib1.h
  |      `-- CMakeLists1.txt
  |
  |-- library2
  |      |-- lib2.cpp
  |      |-- lib2.h
  |      `-- CMakeLists2.txt
  |
  |-- main.cpp
  |-- main.h
  `-- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

库 2 依赖于库 1,而 main.cpp 依赖于它们两者。 我可以很容易地将 main.cpp 和 main.h 链接在一起,并在 main.cpp 中使用 main.h 中的函数。库 1 和 2 也是如此。

但我无法将库 1 链接到库 2 或其中任何一个链接到我的 main.cpp。我的主文件如下所示:

#include <iostream>
#include "main.h"
#include "lib1.h"  // linking error at this line: …
Run Code Online (Sandbox Code Playgroud)

c c++ cmake

2
推荐指数
1
解决办法
537
查看次数