用这个musl gcc 12.2.0搞定了全静态链接,能正常run。
涉及的第三方库有30多个,快累趴了,各种奇怪的知识增长了
cmake有个奇怪的行为,会自作主张给用户指定的*.a增加 Wl,-Bstatic、Wl,-Bdynamic链接指示,而且默认链接到libc.so、libstdc++.so,干扰全静态链接。
需要这样指定:
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "-static")
然后这样链接库:
SET(LIBS
-Wl,--verbose
# 从此处开始的库,都静态链接
-Wl,-Bstatic
libdl.a
libpthread.a
libstdc++fs.a
-Wl,--start-group
${MY_LIBS_DIR}/openssl/lib/libcrypto.a
${MY_LIBS_DIR}/freetype/lib/libfreetype.a
-Wl,--end-group
-Wl,-Bstatic
# 这后面跟的会是编译器自动加的libstdc++、libm、libc、libgcc等隐含库
)
add_executable(${TARGET} ${sources})
target_link_libraries(${TARGET} PRIVATE ${LIBS})
【 在 z16166 的大作中提到: 】
: 谢谢。musl.cc测试了可以,而且支持最新的gcc 12.2.0
:
https://git.zv.io/toolchains/musl-cross-make/-/tree/master/patches/gcc-12.2.0:
--
修改:z16166 FROM 114.241.225.*
FROM 114.241.225.*