求教, mac 下 cmake c++工程编译后 elf 里面还有很多路径字符串

39 天前
 wjx0912

windows 也有这样的问题,后来参考 visual studio 设置 cpp flags 后解决了。 但是 mac 找了一堆参数还是不行。

测试代码: https://github.com/PacktPublishing/Modern-CMake-for-Cpp/blob/main/examples/chapter06/05-dynamic/CMakeLists.txt 编译:

cmake . -G "Unix Makefiles"
cmake --build . --config Release

生成的文件导出的 string 有本地文件夹路径字符串(但实际项目里面并没有用到__path__)

下图是用 cutter (开源反编译工具 https://github.com/rizinorg/cutter ,类似 IDA pro )

添加了一些参数(-flto ,-g0 还是不行),求大佬指点迷津

955 次点击
所在节点    C++
3 条回复
lixile
39 天前
取消-dynamic 的编译宏
然后编译后 strip 一下
ecnelises
38 天前
这个路径是 macOS ld 写到里面的 rpath ,你用 otool -l main_1 就能打印出来。rpath 是告诉 loader 启动程序时去哪里找依赖的动态库的路径列表。所以你要去搜能不能在 CMake 里改 rpath
wjx0912
37 天前
@lixile @ecnelises
感谢 2 位老总。对 mac 实在是不熟悉。cmake 乱加一通算是搞定了,虽然有些参数还不太理解:
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
SET(CMAKE_CXX_FLAGS "-g -w -O2")
LINK_FLAGS "-Wl,-F/Library/Frameworks"
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -g0 -Wl,--strip-all -s -flto -fomit-frame-pointer -fvisibility=hidden")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -dead_strip -Wl,-strip-all -flto -s -fvisibility=hidden -Xlinker")


set(MACOSX_RPATH TRUE)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "@loader_path")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

编译完再 strip 。基本没有冗余了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1093733

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX