• 20986阅读
  • 15回复

求解:Qt creator中如何编写、调用动态链接库(共享对象) [复制链接]

上一主题 下一主题
离线ccnuliughai
 
只看楼主 倒序阅读 楼主  发表于: 2010-08-25
— 本帖被 XChinux 执行加亮操作(2010-09-03) —
师兄让我学习在linux下使用动态链接库(即linux 下的共享对象.so文件),google、百度了很久,找到了一些方法,但还是未果。估计是自己愚钝了。
特在此,请教各位大侠:
1、Qt creator  集成开发环境下该如何生成一个.so文件呢?
2、生成.so文件后,该怎样调用它为其它的程序使用?(我尝试在pro文件中使用LIBS,把路径写上去,还是提示不能打开共享库:


error while loading shared libraries: libsharelib.so.1: cannot open shared object file: No such file or directory


新手,请大侠讲详细些。不甚感激!

[ 此帖被ccnuliughai在2010-08-25 15:04重新编辑 ]
离线ccnuliughai
只看该作者 1楼 发表于: 2010-08-25
在windows下调用会用到一个lib引入文件,在linux下好像没有这个东西,不知该如何调用了。
离线dbzhang800

只看该作者 2楼 发表于: 2010-08-25
一些基本的东西,不妨先看看 http://wiki.ubuntu.org.cn/Compiling_C

至于QtCreator 的生成 so 和 调用 so,也是就是说pro文件,都和windows下一样(无非程序代码上更简单一下)
离线ccnuliughai
只看该作者 3楼 发表于: 2010-08-25
没有IDE,纯粹用手工来直接写源程序,这个很让人头疼。我不可能自己一直用命令行来进行编译链接执行。
使用Qt creator原本就是为了方便我编程,提高效率。
楼上的这个我已经看过。谢谢你的分享。不过,我目前还是需要知道,该如何在Qt  creator中编写、调用.so文件。
正在看qmake 手册,希望找到答案。

还望高人指点。
离线dbzhang800

只看该作者 4楼 发表于: 2010-08-25
引用第3楼ccnuliughai于2010-08-25 13:35发表的  :
没有IDE,纯粹用手工来直接写源程序,这个很让人头疼。我不可能自己一直用命令行来进行编译链接执行。
使用Qt creator原本就是为了方便我编程,提高效率。
楼上的这个我已经看过。谢谢你的分享。不过,我目前还是需要知道,该如何在Qt  creator中编写、调用.so文件。
正在看qmake 手册,希望找到答案。
.......

看你的首贴,我以为你清楚 windows下如何使用 Qt Creator 生成,使用 dll。

首先,二者基本完全一致(Qt 跨平台的内在要求嘛)

生成动态库(共享库),涉及到pro内的
TEMPLATE

CONFIG

使用动态库,无非
INCLUDEPATH

LIBS

如果需要兼顾windows和linux平台,最好遵循
http://doc.qt.nokia.com/latest/sharedlibrary.html

离线ccnuliughai
只看该作者 5楼 发表于: 2010-08-25
呵呵,windows下我i是用vs 2008   来生成和调用动态链接库文件的,creator是之后linux下选用的。
因为用在linux下编译执行程序,因此就选择了Qt ,并使用了Qt creator IDE .

首先非常感想楼上及时的回复。该怎样修改pro文件中的参数,它们又代表着什么意思,为什么要用到他们,能说的再详细些么?
离线ccnuliughai
只看该作者 6楼 发表于: 2010-08-25
正在研读http://doc.qt.nokia.com/latest/sharedlibrary.html 中关于create share library 参考文档中。
恩,很有帮助。

还是请诸位大侠继续分享自己的经验。
离线ccnuliughai
只看该作者 7楼 发表于: 2010-08-25
一直在调用共享库的过程中被覆手脚,出现无法打开share library的错误。原因应该是无法找到这个文件的路径。(我尝试使用LIBS,却不知到为什么总不能成功,很郁闷)
最后不得以使用了以下方法:

将生成的.so共享库文件拷贝到/lib目录下,使得程序执行的时候能加载到这个共享库文件。(由于权限限制,直接拷贝貌似不行)
具体方法:打开终端使用su命令切换到root用户,cp  ####/*.so.*
/lib  ;(###为.so文件所在目录,第一个*为共享库文件名,第二个*为版本号,如1;)
再次执行程序,OK了。

很纳闷,还是不知道该怎样使用LIBS 来更加简便地调用共享库文件,大侠帮忙!




离线ccnuliughai
只看该作者 8楼 发表于: 2010-08-25
回 4楼(dbzhang800) 的帖子
这位仁兄,请问具体应该怎样在Qt creator中的pro中添加动态库文件?
在调用动态库时,总是提示找不到这个共享库文件,很郁闷。
我尝试了LIBS ,还是不行,估计是哪里不对了。

求正解!我是在ubuntu下使用Qt的。谢谢了。
离线dbzhang800

只看该作者 9楼 发表于: 2010-08-25
Re:回 4楼(dbzhang800) 的帖子
引用第8楼ccnuliughai于2010-08-25 15:42发表的 回 4楼(dbzhang800) 的帖子 :
这位仁兄,请问具体应该怎样在Qt creator中的pro中添加动态库文件?
在调用动态库时,总是提示找不到这个共享库文件,很郁闷。
我尝试了LIBS ,还是不行,估计是哪里不对了。
求正解!我是在ubuntu下使用Qt的。谢谢了。

请指明是链接时找不到库文件,还是运行时找不到库文件,这是两个截然不同的问题。
离线ccnuliughai
只看该作者 10楼 发表于: 2010-08-25
回 9楼(dbzhang800) 的帖子
已经生成了可执行文件。是执行时找不到动态库文件
离线ccnuliughai
只看该作者 11楼 发表于: 2010-08-25
回 9楼(dbzhang800) 的帖子
原本的想法是,想把生成的所有动态库文件都放到一个目录下面,然后设置pro去找这个目录。
可是使用LIBS还是不行。应该是我哪里少了些什么东西。
该如何设置呢?求正解!谢谢啦。
离线dbzhang800

只看该作者 12楼 发表于: 2010-08-25
Re:回 9楼(dbzhang800) 的帖子
引用第10楼ccnuliughai于2010-08-25 17:05发表的 回 9楼(dbzhang800) 的帖子 :
已经生成了可执行文件。是执行时找不到动态库文件

哦,这个已经和Qt没任何关系了。去看 ldconfig 的manual吧
离线ccnuliughai
只看该作者 13楼 发表于: 2010-08-25
Re:Re:回 9楼(dbzhang800) 的帖子
引用第12楼dbzhang800于2010-08-25 17:12发表的 Re:回 9楼(dbzhang800) 的帖子 :
哦,这个已经和Qt没任何关系了。去看 ldconfig 的manual吧



这个是什么意思?又是命令行?oh ,my god!
离线joe.aska
只看该作者 14楼 发表于: 2012-08-13
Please try to add this line into .pro file:

LIBS += -L . -Wl,-rpath,.

And put the so file into the same folder with the bin file

离线wjue06

只看该作者 15楼 发表于: 2012-08-27
在creator里新建一个工程,选择“其它项目-c++库”然后把需要封装的类放进去就好了
快速回复
限100 字节
 
上一个 下一个