长沙网站公司网站建设,58同城找房子租房,一个专门做ppt的网站,wordpress代码id减1动态链接库与普通的程序相比而言#xff0c;没有main函数#xff0c;是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接库文件。程序在调用库函数时#xff0c;只需要连接上这个库即可。例如下面实现一个简单的整数四则运输的动态链接库#xff0c;定义的cacula…动态链接库与普通的程序相比而言没有main函数是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接库文件。程序在调用库函数时只需要连接上这个库即可。例如下面实现一个简单的整数四则运输的动态链接库定义的caculate.h和caculate.c两个文件生产libcac.so动态链接库。针对二进制文件有用的命令查看文件类型file查看二进制文件链接到哪些库ldd查看二进制文件里面所包含的symbol,T表示加载U表示undefined symbolnm读二进制文件里面的信息readelf -a smu.o将二进制文件转换为汇编objdump -d sum.o动态链接库的生成sum.c#include #include int sum(int x){int i, result0;for(i0; ix; i){resulti;}if(x 100)exit(-1);return result;};void display(char* msg){printf(%s\n,msg);}int add(float a,float b){return ab;}int sum_array(int array[], int num){int i 0, sum 0;for(i0; isum array[i];return sum;}void modify_array(int array[], int num){int i 0, sum 0;for(i0; iarray[i] * 10;}main.c#include #include int main(void){int x;printf(Input an integer:\n);scanf(%d, x);printf(sum%d\n, sum(x));return 0;};生成可执行文件gcc -c main.c -o main.ogcc -c sum.c -o sum.ogcc sum.o main.o将会生成main的可执行文件file main // ELF 64-bit LSB executablefile sum.o // ELF 64-bit LSB relocatable因为sum.c里面含有可复用的函数所以想把sum.c编译成为一个动态链接库gcc sum.o -shared -o sum.so出现错误提示/usr/bin/ld: sum.o: relocation R_X86_64_PC32 against undefined symbol exitGLIBC_2.2.5 can not be used when making a shared object; recompile with -fPIC/usr/bin/ld: final link failed: Bad valuecollect2: error: ld returned 1 exit status这说明不是所有的.o文件都能编译成为动态链接库需要在.o文件生成时加参数-fPICgcc -c sum.c -fPIC -o sum.ogcc sum.o -o shared sum.so一般共享库的编译命令为(曾经的实验)动态链接库gcc -shared -fPIC -o libmyhello.so hello.ogcc -o hello main.c -L. -lmyhello静态链接厍ar rcs libxx.a xx.og -o main main.cpp -static -L. -lxx这时候再g -o main main.c sum.so./main有时会报错error while loading shared libraries: sum.so: cannot open shared object file: No such file or directoryldd mainoutput:sum.so not found这时候需要export $LD_LIBRARY_PATHpwd:$LD_LIBRARY_PATH注意:-fPIC是生成.o时使用-shared是用来生成动态链接库的以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持脚本之家。