gpt4 book ai didi

gcc - 强制相对调试符号路径(maven-native-plugin)

转载 作者:行者123 更新时间:2023-12-01 20:04:14 29 4
gpt4 key购买 nike

我正在使用native-maven-plugin在Linux上编译共享库。我通过编译器选项 -g 来启用调试符号生成。以下是 POM 的摘录:

            <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<workingDirectory></workingDirectory>
<compilerStartOptions>
<compilerStartOption>-g</compilerStartOption>
</compilerStartOptions>
<linkerStartOptions>
<linkerStartOption>-shared</linkerStartOption>
<linkerStartOption>-g</linkerStartOption>
</linkerStartOptions>
<sources>
...
</sources>
</configuration>
</plugin>

在调用gcc时,native-maven-plugin始终使用源文件的绝对路径。这也会导致调试符号中出现绝对路径。列出调试符号的 nm -l libfoo.so 的输出如下所示:

0000797a T GetTickCount /home/myusername/projects/blabla/foo.c:3005

正如您所看到的,源文件路径是绝对的,包括我的用户名和项目结构。我不想要这样。 如何将调试符号更改为相对路径名?

最佳答案

好吧,我发现 gcc 中有一个 -fdebug-prefix-map=oldPath=newPath 选项,它正是我想要的。要根据我的问题编译文件 /home/myusername/projects/blabla/foo.c:

gcc -fdebug-prefix-map=/home/myusername/projects/blabla=theNewPathInDebug -o foo.o foo.c
gcc -shared -o libfoo.so foo.o

然后调试符号路径将如下所示(nm -l libfoo.so):

0000797a T GetTickCount theNewPathInDebug/foo.c:3005

然后您可以使用 gdb 路径替换来设置 gdb 的实际源文件位置。

为了让 Maven 中的一切正常工作,我的 pom 如下所示:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<workingDirectory></workingDirectory>
<compilerStartOptions>
<compilerStartOption>-g</compilerStartOption>
<compilerStartOption>-fdebug-prefix-map=${project.build.directory}/extracted-c=theNewPathInDebug</compilerStartOption>
</compilerStartOptions>
<linkerStartOptions>
<linkerStartOption>-shared</linkerStartOption>
<linkerStartOption>-g</linkerStartOption>
</linkerStartOptions>
<sources>
<source>
<directory>${project.build.directory}/extracted-c</directory>
<fileNames>
<fileName>foo.c</fileName>
</fileNames>
</source>
</sources>
</configuration>
</plugin>

其中extracted-cmaven-dependency-plugin提取C源文件/头文件的位置。

关于gcc - 强制相对调试符号路径(maven-native-plugin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16733387/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com