Ubuntu16.04 Eclipse配置PoDoFo遇链接错误:未定义pthread符号
解决Ubuntu 16.04 Eclipse中PoDoFo链接pthread符号缺失的问题
我之前碰过一模一样的链接问题,这本质上是链接器没显式拉上pthread库导致的——PoDoFo编译时本身依赖pthread,但你在Eclipse的链接配置里大概率漏掉了它。下面是一步步的解决办法:
修改Eclipse的链接器配置
- 右键你的C++项目,选择
Properties→C/C++ Build→Settings - 切到
Tool Settings标签,找到GCC C++ Linker下的Libraries选项 - 在
Libraries (-l)区域点击Add,输入pthread后确认 - 确保
podofo已经在库列表里,同时Library search path (-L)里的/usr/local/lib路径正确无误
- 右键你的C++项目,选择
刷新系统库缓存(可选但推荐)
虽然你说libpthread.so.0存在,但可以手动跑一遍sudo ldconfig刷新缓存,确保系统能正确索引到它。也可以用ldconfig -p | grep pthread命令验证库的路径是否正常输出。如果上面的步骤还不行,检查PoDoFo的编译配置
要是你编译PoDoFo时没正确开启pthread支持,也会出现这种问题。如果是用cmake编译的,重新编译时加上这两个参数:cmake -DCMAKE_THREAD_PREFER_PTHREAD=ON -DTHREADS_PREFER_PTHREAD_FLAG=ON .. make && sudo make install
为什么会出现这个错误?
简单说,PoDoFo的源码里用到了pthread的互斥锁相关函数,但链接器生成可执行文件时,默认不会自动链接pthread库,必须显式通过
-lpthread参数指定它。哪怕系统里存在libpthread.so.0,没在链接配置里加进去,链接器就找不到对应的符号。
内容的提问来源于stack exchange,提问作者saumitra mallick
相关产品推荐
相关产品推荐

