Linux 下调用动态链接库

时间:2021-07-21 15:51:22
别人做的动态链接库,现在需要调用里面的函数做点东西,可是我对这个方面不太会,就是个小菜鸟,求高手帮忙。
现在有别人给的,有.h .cpp .a .so文件,我要怎么调用呢?测试文件:main.cpp 

18 个解决方案

#1


了解下动态库和静态库就会使用了,自己搜索下,或简单看看下面文章
http://hi.baidu.com/mgqw/blog/item/120a1d3dab7f1f03bba16710.html

#2


g++ -o test main.cpp *.a
就可以了
*.a就是别人给你的库文件。编译生成test

#3


引用 1 楼 thefirstz 的回复:
了解下动态库和静态库就会使用了,自己搜索下,或简单看看下面文章
http://hi.baidu.com/mgqw/blog/item/120a1d3dab7f1f03bba16710.html

我当然看过,搜索过相关的文章,也了解了动态与静态库,而且我按着网上的人说的方法自己创建和生成静态库,动态库了,并且已经用简单的文件成功调用了,可是,同样的编译和调用方法,用在别人给的这个上,就没有作用,编译都编译不过去

#4


引用 2 楼 yong_f 的回复:
g++ -o test main.cpp *.a
就可以了
*.a就是别人给你的库文件。编译生成test

编译不过去啊……有错误……

#5


错误提示是什么?
C++中有name-mangling,动态库尽量用纯C版本的

#6


.h error:expected constructor. destructor. or type conversion before  乱码 token 
这是其中错误之一的格式,好像没有连接上动态库……

#7


export LANG=C
g++ -o test main.cpp *.a

提示什么?

#8


引用 7 楼 justkk 的回复:
export LANG=C
g++ -o test main.cpp *.a

提示什么?

一样的错误,不过没有乱码了

#9


难道屏幕输出这个??
.h error:expected constructor. destructor. or type conversion before token  

#10


.h error:expected constructor. destructor. or type conversion before '(' token 

#11


引用 9 楼 justkk 的回复:
.h error:expected constructor. destructor. or type conversion before token

.h error:expected constructor. destructor. or type conversion before '(' token 
.h error:'WORD' does not name a type
…………
等等错误,我真不知道该怎么弄了,从哪里入手

#12


缺少头文件吧
类型不识别

#13


引用 12 楼 justkk 的回复:
缺少头文件吧
类型不识别

有头文件啊,可是为什么会这样?

#14


baidu 

#15


在LINUX环境下,我知道你可以DLOPEN,DLCLOSE,一系列函数通过函数名来找到相应的函数,返回函数指针你可以通过函数指针调用该函数,C++我快忘光拉,不知道C++能不能这样做!

#16


如果静态加载的话,包含你所需要加载类库的头文件,这样编译就没有问题;
链接时,用-L指定库的路径,-l指定库的名字,这样就OK了。
你的报错:
.h error:expected constructor. destructor. or type conversion before '(' token 
.h error:'WORD' does not name a type
应该是在编译阶段,那就是所链接的符号找不到,比如WORD,你可以查一下WORD有没有定义。
一般“does not name a type”错误,是这个类型不认识。

#17


.h error:expected constructor. destructor. or type conversion before '(' token

"("前面的那个结构体或者变量系统不认识。

#18


还是木有弄明白这个问题……唉……以后有空再研究吧……

#1


了解下动态库和静态库就会使用了,自己搜索下,或简单看看下面文章
http://hi.baidu.com/mgqw/blog/item/120a1d3dab7f1f03bba16710.html

#2


g++ -o test main.cpp *.a
就可以了
*.a就是别人给你的库文件。编译生成test

#3


引用 1 楼 thefirstz 的回复:
了解下动态库和静态库就会使用了,自己搜索下,或简单看看下面文章
http://hi.baidu.com/mgqw/blog/item/120a1d3dab7f1f03bba16710.html

我当然看过,搜索过相关的文章,也了解了动态与静态库,而且我按着网上的人说的方法自己创建和生成静态库,动态库了,并且已经用简单的文件成功调用了,可是,同样的编译和调用方法,用在别人给的这个上,就没有作用,编译都编译不过去

#4


引用 2 楼 yong_f 的回复:
g++ -o test main.cpp *.a
就可以了
*.a就是别人给你的库文件。编译生成test

编译不过去啊……有错误……

#5


错误提示是什么?
C++中有name-mangling,动态库尽量用纯C版本的

#6


.h error:expected constructor. destructor. or type conversion before  乱码 token 
这是其中错误之一的格式,好像没有连接上动态库……

#7


export LANG=C
g++ -o test main.cpp *.a

提示什么?

#8


引用 7 楼 justkk 的回复:
export LANG=C
g++ -o test main.cpp *.a

提示什么?

一样的错误,不过没有乱码了

#9


难道屏幕输出这个??
.h error:expected constructor. destructor. or type conversion before token  

#10


.h error:expected constructor. destructor. or type conversion before '(' token 

#11


引用 9 楼 justkk 的回复:
.h error:expected constructor. destructor. or type conversion before token

.h error:expected constructor. destructor. or type conversion before '(' token 
.h error:'WORD' does not name a type
…………
等等错误,我真不知道该怎么弄了,从哪里入手

#12


缺少头文件吧
类型不识别

#13


引用 12 楼 justkk 的回复:
缺少头文件吧
类型不识别

有头文件啊,可是为什么会这样?

#14


baidu 

#15


在LINUX环境下,我知道你可以DLOPEN,DLCLOSE,一系列函数通过函数名来找到相应的函数,返回函数指针你可以通过函数指针调用该函数,C++我快忘光拉,不知道C++能不能这样做!

#16


如果静态加载的话,包含你所需要加载类库的头文件,这样编译就没有问题;
链接时,用-L指定库的路径,-l指定库的名字,这样就OK了。
你的报错:
.h error:expected constructor. destructor. or type conversion before '(' token 
.h error:'WORD' does not name a type
应该是在编译阶段,那就是所链接的符号找不到,比如WORD,你可以查一下WORD有没有定义。
一般“does not name a type”错误,是这个类型不认识。

#17


.h error:expected constructor. destructor. or type conversion before '(' token

"("前面的那个结构体或者变量系统不认识。

#18


还是木有弄明白这个问题……唉……以后有空再研究吧……