为QNX编译gRPC示例时遭遇链接错误求助
解决QNX构建gRPC示例时的链接器错误
问题背景
已成功为QNX编译gRPC,构建示例时执行以下命令:
cmake -DCMAKE_C_COMPILER=qcc -DCMAKE_CXX_COMPILER=q++ ../..
出现链接器错误,提示找不到-lpthread和-ldl:
[ 90%] Linking CXX executable greeter_client [ 95%] Linking CXX executable greeter_async_client [100%] Linking CXX executable greeter_async_server /home/csa/src/qnx//host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-ld: cannot find -lpthread /home/csa/src/qnx//host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-ld: cannot find -lpthread /home/csa/src/qnx//host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-ld: cannot find -lpthread /home/csa/src/qnx//host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-ld: cannot find -ldl /home/csa/src/qnx//host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-ld: cannot find -ldl /home/csa/src/qnx//host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-ld: cannot find -ldl
解决方案
QNX系统中,线程和动态链接的功能都集成在libc.so中,没有单独的libpthread.so和libdl.so,因此需要修改CMake的链接配置:
1. 直接修改CMake命令
将以下参数添加到构建命令中,跳过对pthread和dl库的自动链接:
cmake -DCMAKE_C_COMPILER=qcc -DCMAKE_CXX_COMPILER=q++ \ -DCMAKE_THREAD_LIBS_INIT="" \ -DTHREADS_PTHREAD_ARG="" \ -DCMAKE_DL_LIBS="" \ ../..
2. 修改CMakeLists.txt
如果有权限修改示例的CMakeLists.txt,可添加以下配置:
# 禁用pthread库链接 set(CMAKE_THREAD_LIBS_INIT "") set(THREADS_PTHREAD_ARG "") # 禁用dl库链接 set(CMAKE_DL_LIBS "")
3. 额外建议
如果编译gRPC时未指定QNX工具链,建议重新编译gRPC时使用QNX的工具链文件,这样构建示例时会自动继承适配QNX的链接设置,避免此类问题。
内容的提问来源于stack exchange,提问作者Lucas Karpinski
相关产品推荐
相关产品推荐

