记录gcc便编译遇到的问题和积累的经验
文章目录
一、 编译命令
编译过程
预处理(Pre-Processing)–>编译(Compiling)–>汇编(Assembling)–>链接(Linking)

| 后缀 | 描述 |
|---|---|
| .c | C 源文件 |
| .C/.cc/.cxx/.cpp | C++ 源文件 |
| .h | C/C++ 头文件 |
| .i/.ii | 经过预处理的C/C++文件 |
| .s/.S | 汇编语言源文件 |
| .o/.obj | 目标文件 |
| .a/.lib | 静态库 |
| .so/.dll | 动态库 |
gcc -fPIC -I /home/test/testdefault/tools/java/jdk1.8.0_152/include/ -I /home/test/testdefault/tools/java/jdk1.8.0_152/include/linux/ -I /home/up_ss/openssl-1.1.1u/include -L/opt/openssl/lib64 -lcrypto -lssl -Wl,-rpath=/opt/openssl/lib64 -shared -o libencrypt.so com_mdcp_test_business_service_DevEncryptJni.c
看上面的编译命令很长,实际上只需要记住以下几个常用的参数即可:
| 参数 | 说明 |
|---|---|
| -I | 指定头文件的路径,需要include的文件 |
| -L | 指定链接库的路径 |
| -l | 指定需要链接的具体库名 |
| -shared | 创建共享库/动态库 |
| -static | 使用静态链接 |
| -Wl | 将逗号分隔的 传递给链接器(linker) |
| -rpath | 指定运行时库路径 |
| -o | 指定输出文件 |
第二章 遇到问题
一、编译的动态库无法正常运行
通过指定rpath解决,该问题可以通过以下三种方式处理:
1)设置环境变量 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$(pwd)
2)使用rpath将共享库位置嵌入到程序
rpath 即 run path,是种可以将共享库位置嵌入程序中的方法,从而不用依赖于默 认位置和环境变量。
3)将so共享库添加到系统路径
sudo cp libfoo.so /usr/lib/
如果依然无法运行,可以尝试执行ldconfig命令更新共享库的缓存列表。
第三章 实用命令
一、ldd查看动态库的链接库信息
AAS-TEST:~/ttt # ldd libencrypt.so
linux-vdso.so.1 (0x00007ffd1b269000)
libcrypto.so.1.1 => /opt/openssl/lib64/libcrypto.so.1.1 (0x00007f80a378a000)
libssl.so.1.1 => /opt/openssl/lib64/libssl.so.1.1 (0x00007f80a34d9000)
libz.so.1 => /opt/openssl/lib64/libz.so.1 (0x00007f80a32bd000)
libc.so.6 => /lib64/libc.so.6 (0x00007f80a2f18000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f80a2d14000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f80a2af7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f80a3ecb000)
二、readelf -d libencrypt.so查看动态库的基本信息

三、echo $PATH
查看系统LD_LIBRARY_PATH动态库路径
四、nm -D encrypt.so | grep encrypt,查找函数
AAS-TEST:~/ttt # nm -D encrypt.so | grep encrypt
0000000000002021 T Java_com_mdcp_test_business_service_DevEncryptJni_encryptByModule
0000000000001b52 T encrypt
五、ldconfig更新共享库的缓存列表
本文详细讲述了在使用GCC编译过程中遇到动态库无法正常运行的问题,介绍了设置LD_LIBRARY_PATH、使用rpath和将so库添加到系统路径等解决方法,同时提供了查看动态库链接信息、基本属性和查找函数的实用命令,以及ldconfig的作用。
5156

被折叠的 条评论
为什么被折叠?



