Ubuntu中Code::Block创建调用.a,.so文件及遇到的问题总结

本文介绍了在Ubuntu环境下,如何使用Code::Blocks创建和调用静态库(.a)和动态库(.so),包括删除不需要的文件、配置编译环境、设置链接库和搜索目录等步骤。同时,总结了编译过程中可能遇到的问题,如relocation错误和符号未声明错误,并提供了相应的解决办法。此外,还讲解了如何编译ARM架构的库,并提到了g++和gcc的区别。

目录

1,创建调用静态库(.a)

1.0,生成

1,打开CodeBlock
2,create a new project
3,static library
4,delete main文件
5,生成自己的.h,.cpp文件,build即可。可生成.a

1.1,调用

1,打开CodeBlock
2,create a new project
3,console application
4,配置环境:
右键工程Build options=》linker settings=》link libraries:添加(add)自己的静态库(.a路径)
Build options=》search directories=》complier:添加的自己的包含目录(.h目录)
4,修改 main文件,调用.h中什么的函数即可

2,创建调用动态库(.so)

2.0 生成

1,打开CodeBlock
2,create a new project
3,shared library
4,delete main文件
5,生成自己的.h,.cpp文件,build即可。可生成(.so)

2.1调用

同1.1

3,遇到的问题

3.1 ,relocation R_X86_64_PC32 against undefined symbol;ld returned 1 exit status

解决方案:
 Setting=>Complier settings=>Compliser settings=>other compiler options=>输入-fpic

原因:
 一般出现在64位电脑编译动态库的过程中。
 -fpic:是指地址无关代码
 动态库编译链接的时候都采用了相对地址,需要载入的时候,根据相对地址的偏移计算出最后的绝对位置地址载入内存。问题出在64位环境下用来进行位置偏移定位的cpu指令只支持32位的偏移

具体解释如下:
x64环境下CodeBlocks编译动态链接库的问题

3.2 not declared in this scope

原因:
 莫名在工程目录下,多备份了.h文件,和包含目录的.h文件重叠。删掉即可

4,编译arm架构

32位:

sudo apt install g+±arm-linux-gnueabi
sudo apt-get install gcc-arm-linux-gnueabi
命令:arm-linux-gnueabi-g++

64位:

sudo apt install gcc-aarch64-linux-gnu
sudo apt install g+±aarch64-linux-gnu
命令:aarch64-linux-gnu-g++

注意事项:
命名规则:
静态库: lib[my_library_name].a
动态库: lib[my_library_name].so

rm-linux-gnueabi-g++ -fPIC -shared -o lib***.so ***.cpp ***.cpp ***.cpp

参数详解
-shared 该选项指定生成动态连接库
-fPIC表示编译为位置独立代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的
-L.表示要连接的库在当前目录中

遇到的问题:
1:

arm-linux-gnueabi-gcc: error trying to exec ‘cc1plus’: execvp: No such file or directory

**原因:**没有安装arm-linux-gnueabi-g++

2:

Java调用显示dlopen failed:library “libstdc++.so.6” not found

**原因:**待查

g++,gcc的区别与联系:
g++: GCC中的GUN C++ Compiler(C++编译器)
 1,对于*.c和*.cpp,统一当做cpp文件编译
 2,自动链接标准库STL

gcc: gcc是GCC中的GUN C Compiler(C 编译器)
 1,对于*.c和*.cpp,分别当做c和cpp文件编译
 2,不会自动链接STL

在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值