C++ Linux可执行文件中列出的源文件
在LinuxMint上使用GCC4.9.2为GNU/Linux2.6.32构建的ELF64位LSB可执行文件上运行字符串,我看到 some/path/sourcefile1.cpp 部分/path/sourcefile2.cpp 等 我不希望在生成的可执行文件中包含源路径和文件名。我尝试使用strip-strip-all-binaryName删除它们,但路径和文件名仍然存在 这是用CMake建造的。我给了CMake a-s标志以传递给编译器,但它似乎对结果没有影响。我不相信二进制文件是用调试符号构建的。我让CMake做一个发布版本 不管它是如何构建的,我希望strip能够删除源代码的路径和文件名 如何从生成的二进制文件中删除此信息?我不关心可执行文件的大小 更新: 以下是我仍然看到的字符串: 有文件引用。我已经把那些拿走了。 在剥离二进制文件之后,objdump-syms不会产生任何符号。 我正在使用-DNDEBUG。所有的-g条目都已删除,所以我不是为调试而编译的。 readelf只显示了一件我不想要的东西,那就是库rpath,我想我可以解决这个问题。 虽然我看到了源文件的路径和文件名,但最后有一个.o,这让我觉得它来自链接器。 -auxbase条让我认为-fno compare debug应该有帮助,但它没有。 在构建之前,我删除构建文件夹并运行cmake-DCMAKE\u BUILD\u TYPE=Release,这将为我提供一个干净的发布版本。C++ Linux可执行文件中列出的源文件,c++,linux,gcc,strip,C++,Linux,Gcc,Strip,在LinuxMint上使用GCC4.9.2为GNU/Linux2.6.32构建的ELF64位LSB可执行文件上运行字符串,我看到 some/path/sourcefile1.cpp 部分/path/sourcefile2.cpp 等 我不希望在生成的可执行文件中包含源路径和文件名。我尝试使用strip-strip-all-binaryName删除它们,但路径和文件名仍然存在 这是用CMake建造的。我给了CMake a-s标志以传递给编译器,但它似乎对结果没有影响。我不相信二进制文件是用调试符号
这让我感到困惑。您的源代码几乎肯定会为 诊断/调试目的。这些调用将扩展到 无法剥离,因为它们是静态程序数据 您说您正在进行发布构建。你应该能 为发布版本定义预处理器宏以消除所有 从编译中调试代码。要么你没有这样做,要么 源代码中的条件编译指令有错误,无法执行 即使在发布版本中,也可以消除对_文件的一些调用 最有可能的情况是您调用了assert宏 在您的源代码中,这些代码在您的发布版本中不会为空 因为您未能定义预处理器宏NDEBUG。 除非assert为null,否则它将调用_文件_uu-和assert 如果不定义NDEBUG,则不会为空 如果您的发行版可执行文件中的所有不可剥离路径 如果是由于非无效资产,则可以将其清除
通过将-DNDEBUG添加到发布版本的预处理器标志中。可能有使用过的宏,如assert,其中包含一个_文件。\u请尝试使用-g0编译器标志删除调试符号。有_文件_引用。我已经把那些拿走了。objdump-syms不会产生任何符号,我使用的是-DNDEBUG,所以我不是为调试而编译的。readelf只显示了一件我不想要的东西,那就是库rpath。仍然有字符串显示/home/kmort/longpath here/filename1.cpp-auxbase strip-CMakeFiles/filename2.dir/\uuuuuuuu/\uuuuuuu/\uuuuuuu//longpath here/filename1.cpp.o/home/kmort/longpath here/filename2.cpp-auxbase strip-CMakeFiles/filename2.dir/\uuuuuuuu/\uuuuuuuu/\uuuuuuu/\uuuuu/\uuuuuu/\uuuuu/\uuuuuu/\uuuuuuuuu/\uuuuuu。有什么想法吗?
/home/kmort/longPathHere/filename1.cpp -auxbase-strip CMakeFiles/filename2.dir/__/__/__/__/__/longPathHere/filename1.cpp.o
/home/kmort/longPathHere/filename2.cpp -auxbase-strip CMakeFiles/filename2.dir/__/__/__/__/__/longPathHere/filename2.cpp.o
etc