Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Linux可执行文件中列出的源文件_C++_Linux_Gcc_Strip - Fatal编程技术网

C++ Linux可执行文件中列出的源文件

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标志以传递给编译器,但它似乎对结果没有影响。我不相信二进制文件是用调试符号

在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,这将为我提供一个干净的发布版本。
这让我感到困惑。

您的源代码几乎肯定会为 诊断/调试目的。这些调用将扩展到 无法剥离,因为它们是静态程序数据

您说您正在进行发布构建。你应该能 为发布版本定义预处理器宏以消除所有 从编译中调试代码。要么你没有这样做,要么 源代码中的条件编译指令有错误,无法执行 即使在发布版本中,也可以消除对_文件的一些调用

最有可能的情况是您调用了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/filenam‌​e1.cpp.o 
/home/kmort/longPathHere/filename2.cpp -auxbase-strip CMakeFiles/filename2.dir/__/__/__/__/__/longPathHere/filenam‌​e2.cpp.o
etc