如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist

How I should to do with Cmakelist.txt if i want to link static lib and remove unused symbols

本文关键字:何处理 我应该 txt Cmakelist 处理 符号 链接 静态 未使用 删除 如果      更新时间:2023-10-16

现在我想将'libbz2.a'链接到我的程序,但是当我编译程序时,exe的大小将变成以前的两倍。 CmakeLists.txt是

find_library(Bz2_LIBRSRY NAMES libbz2.a)
....
target_link_libraries(${Bz2_LIBRSRY})
install( TARGETS
....
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)

由于某些原因我不能使用共享库,只能使用静态库,我知道这个 gcc -Os -fdata-sections -ffunction-sections 测试.cpp -o test -wl,--gc-sections 可以做到,但我不知道如何在 CmakeLi 中做到这一点 那么,我应该如何使用camke使exe变小呢?感谢所有人回答

如果您更关心可执行文件的大小,请使用共享库而不是静态库。

find_library(Bz2_LIBRSRY NAMES libbz2.so)

然后将其链接到您的target

target_link_libraries(${target_name} PRIVATE ${Bz2_LIBRSRY})

${target_name}将替换为您拥有的目标名称。

另外,${Bz2_LIBRSRY}对我来说似乎是一个错字。

我知道这个gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections可以做到

你可以这样做:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -fdata-sections -ffunction-sections")