相关疑难解决方法(0)

如何将两个"ar"静态库合并为一个?

我有2个静态的Linux库,通过创建ar cr,libabc.alibxyz.a.
我想将它们合并到一个静态库中libaz.a.
我怎样才能做到这一点.

我想创建一个合并的静态库,而不是让两个库都给应用程序的最终链接.

linux static-libraries unix-ar

80
推荐指数
3
解决办法
7万
查看次数

ld链接器问题:--whole-archive选项

--whole-archive我见过的唯一真正使用的链接器选项是从静态库创建共享库.最近我遇到了Makefile(s),它在链接内部静态库时总是使用这个选项.这当然会导致可执行文件不必要地引入未引用的目标代码.我对此的反应是,这是完全错误的,我在这里遗漏了什么吗?

我的第二个问题与我读到的有关整个存档选项的内容有关,但无法完全解析.--whole-archive如果可执行文件还链接到共享库,而该共享库又(部分地)具有与静态库相同的目标代码,则在与静态库链接时应该使用该 选项.这是共享库,静态库在目标代码方面有重叠.使用此选项将强制在可执行文件中解析所有符号(无论使用情况).这应该避免目标代码重复.这是令人困惑的,如果一个符号在程序中被引用,它必须在链接时唯一地解决,这个关于复制的业务是什么?(如果这一段不是清晰的缩影,请原谅我)

谢谢

linker build-process static-libraries

41
推荐指数
4
解决办法
5万
查看次数

如何在 CMake 中将多个库目标分组为一个

我正在尝试将多个目标分组为一个目标,以便下游用户只需要链接到该单个目标。下游用户不需要查找所有目标,并且上游库中的所有功能都可以通过链接到该目标来使用。请参阅下面我失败的尝试的 CMakeLists。

cmake_minimum_required(VERSION 3.11)
project(modules)

# 10 libraries with actually functionality
add_subdirectory(mylib1)
add_subdirectory(mylib2)
...
add_subdirectory(mylib10)

# failed attempt to create a single library that links to the above 10
add_library(myliball)

target_link_libraries(myliball mylib1 mylib2 ... mylib10)

install(TARGETS myliball
        EXPORT ${CMAKE_PROJECT_NAME}Targets
        ARCHIVE DESTINATION lib
        LIBRARY DESTINATION lib
        RUNTIME DESTINATION bin)

export(TARGETS myliball
      APPEND FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)
Run Code Online (Sandbox Code Playgroud)

当我运行 cmake 时它显示此错误

No SOURCES given to target: myliball
Run Code Online (Sandbox Code Playgroud)

我也许可以为 myliball 创建一个空类来解决这个问题,但这似乎很混乱。有一个更好的方法吗?

cmake

4
推荐指数
1
解决办法
3394
查看次数

标签 统计

static-libraries ×2

build-process ×1

cmake ×1

linker ×1

linux ×1

unix-ar ×1