datadump
V2EX  ›  C++

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

  •  
  •   datadump ·
    PRO
    · Nov 29, 2024 · 2662 views
  •   You need to sign in to view this topic
    This topic created in 691 days ago, the information mentioned may be changed or developed.

    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 还是不行),求大佬指点迷津

    3 replies  •  2024-12-01 17:11:45 +08:00
    lixile
        1
    lixile  
       Nov 29, 2024
    取消-dynamic 的编译宏
    然后编译后 strip 一下
    ecnelises
        2
    ecnelises  
       Nov 30, 2024
    这个路径是 macOS ld 写到里面的 rpath ,你用 otool -l main_1 就能打印出来。rpath 是告诉 loader 启动程序时去哪里找依赖的动态库的路径列表。所以你要去搜能不能在 CMake 里改 rpath
    datadump
        3
    datadump  
    OP
    PRO
       Dec 1, 2024
    @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 。基本没有冗余了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5573 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:21 · PVG 09:21 · LAX 18:21 · JFK 21:21
    ♥ Do have faith in what you're doing.