如何编译uamqp静态库以移除其中的绝对路径信息?
解决Azure uamqp库编译时保留绝对路径的问题
这个问题挺常见的——编译器默认会把编译时源文件的绝对路径嵌入到生成的库中,导致运行时错误信息暴露这些路径。咱们可以通过调整CMake的编译选项来解决,具体步骤如下:
核心思路:利用GCC/Clang的路径映射编译选项,把编译时的绝对路径替换成相对路径或者直接移除。因为uamqp是C语言编写的,咱们只需要针对C编译选项配置即可。
具体CMake命令:
如果你想把绝对路径替换成相对路径(比如相对于库的编译根目录),运行CMake时添加:
cmake -DCMAKE_C_FLAGS="-ffile-prefix-map=${PWD}=." <uamqp源码目录路径>这里
${PWD}是你当前运行CMake的目录(也就是uamqp的编译根目录),替换成.后,错误信息里会显示类似./src/saslclientio.c这样的相对路径。如果你想完全只保留文件名,不显示任何路径,把映射的目标设为空即可:
cmake -DCMAKE_C_FLAGS="-ffile-prefix-map=${PWD}=" <uamqp源码目录路径>这样错误信息里就只会显示
saslclientio.c,不会有任何前缀路径。如果你同时需要处理调试信息中的路径(比如gdb调试时的路径显示),可以额外加上
-fdebug-prefix-map选项:cmake -DCMAKE_C_FLAGS="-ffile-prefix-map=${PWD}=. -fdebug-prefix-map=${PWD}=." <uamqp源码目录路径>
注意事项:
这些选项是GCC和Clang编译器支持的,从你给出的路径来看应该是Linux环境下的GCC/Clang,所以上面的命令完全适用。如果是其他编译器(比如MSVC),需要对应调整相关参数。
重新编译uamqp库后,运行时的错误信息就不会再显示编译时的原始绝对路径了。
内容的提问来源于stack exchange,提问作者halim
相关产品推荐
相关产品推荐

