Ubuntu下编译基于libpoco工程详解

来源:互联网 发布:linux 字符串连接 编辑:程序博客网 时间:2024/05/16 15:05

最近尝试着把macosx下的codelite工程移植到linux下运行,系统选择的是ubuntu12.04(64位),以下为详细过程:

1. 安装codelite,执行apt-get install codelite,该步骤将安装codelite,gnu gcc/g++编译器,gdb调试器。

2. 安装make工具 ,执行apt-get install make

3. 安装mysql社区服务器版本及workbench

4. 因为工程是基于libpoco库,为了保持链接库统一,就不用apt自带的libpoco开发库了,到官网下载poco-all源码版本.

    解压,因为我用的是静态库,在终端命令行下跳到压缩根目录,执行./configure -static --omit=Data/ODBC;sudo make -s -j4;

5. 前期工作差不多好了,直接用codelite打开workspace,编译整个workspace,出现第一个错误:

    `a local symbol' can not be used when making a shared object; recompile with -fPIC, 字面上意思是符号导出有问题,用-fPIC参数重编译。

    这种情况大多出现在64位系统,在编译参数项加上-fPIC,该错误解决。

6. 第二个错误其实是一堆错误,核心都是提示poco静态链接库内引用无效,这不应该啊,我都强制加到link library里面了,google之,

    居然没有人碰到,或者是这个问题太简单了?只能把所有链接库全部去掉,一个一个往上加,加一个编译一次,终于发现一个自己犯了一个白痴的问题,

    静态链接库在 -o时候是有顺序的,后面就简单了,按照poco各项目依赖关系,调整顺序后,该错误解决。

7.第三个错误提示dlopen 错误,这个比较常见,在link option中加上-ldl就ok了

8. 第四个提示pthead错误,在link option中加上-lpthread或者引入动态链接库lpthread.so,如果引入静态库lpthread.a会出现些乱七八糟的问题,主要原因是相互依赖的链接库,静态库和动态库同时引入造成的冲突。

9. 终于只剩下一个错误了,提示msyql不支持compress,在link option中加上-lz就好了。

运行编译好的执行文件,一切都很完美,bty个人比较喜欢codelite,简单而有效。


0 0