菜鸟问题,qt creator使用动态链接库的问题

ZRYXS 2011-07-25 07:39:08
我写了一个动态库abc,
abc.h内容:
int add(int a, int b);

abc.c内容:
int add(int a, int b)
{
return a + b;
}

gcc -fpic -shared -o libabc.so abc.c 生成一个库文件libabc.so.

然后用qt creator创建了一个窗口应用程序工程hello,把abc.h和libabc.so放到hello文件夹下面,在hello.pro工程文件里面添加了 LIBS +=./libabc.so
也把头文件包含进去了,但编译的时候说找不到add函数。

求解啊, 按照网上方法,折腾了一天,还是没有搞清楚 qt creator如何使用动态库的、、、 qt creator 是2.2.1
...全文
672 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuchnj 2012-03-06
  • 打赏
  • 举报
回复
请教:我在中标麒麟操作系统下用QT creator 生成的动态库,为什么会是四个文件:libXXXX.so,libXXXX.so.1,libXXXX.so.1.0,libXXXX.so.1.0.0?看文件说明,前三个是指向动态库的链接,最后一个是动态库,但总是加载不了!!为什么?

那位大虾指教指教!
ZRYXS 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yiyaaixuexi 的回复:]

引用 13 楼 zryxs 的回复:
引用 12 楼 yiyaaixuexi 的回复:

引用 11 楼 zryxs 的回复:
引用 9 楼 yiyaaixuexi 的回复:

INCLUDEPATH += ../
LIBS +=./libabc.so


No such file: File format not recognized????

右键添加库,用这样的方式……
[/Quote]

太好了, 我也是刚接触linux下qt编程,入门遇到的难题还真是多啊,不像win下那个方便、、
念茜 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zryxs 的回复:]
引用 12 楼 yiyaaixuexi 的回复:

引用 11 楼 zryxs 的回复:
引用 9 楼 yiyaaixuexi 的回复:

INCLUDEPATH += ../
LIBS +=./libabc.so


No such file: File format not recognized????

右键添加库,用这样的方式来做,还是提示找不到函数 肯定是路径的问题……
[/Quote]

我对Qt的库链接这块是个盲区 明天上班简单测试下 一定的 之后也要用到
ZRYXS 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yiyaaixuexi 的回复:]

引用 11 楼 zryxs 的回复:
引用 9 楼 yiyaaixuexi 的回复:

INCLUDEPATH += ../
LIBS +=./libabc.so


No such file: File format not recognized????

右键添加库,用这样的方式来做,还是提示找不到函数 肯定是路径的问题呀

动态库链接库 程序运行时查找的顺序是:当前路……
[/Quote]

真是多谢你了,这么耐心帮我
要是你那里有环境的话可以简单写个程序测试下, 看看有没有什么发现
念茜 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zryxs 的回复:]
引用 9 楼 yiyaaixuexi 的回复:

INCLUDEPATH += ../
LIBS +=./libabc.so


No such file: File format not recognized????

右键添加库,用这样的方式来做,还是提示找不到函数 肯定是路径的问题呀

动态库链接库 程序运行时查找的顺序是:当前路径 -> 系统路径
手动复制到工程目录 ……
[/Quote]

说的 我也好郁闷……
到底差在哪里。。。。。。呃。。。。
ZRYXS 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yiyaaixuexi 的回复:]

INCLUDEPATH += ../
LIBS +=./libabc.so


No such file: File format not recognized????

右键添加库,用这样的方式来做,还是提示找不到函数 肯定是路径的问题呀

动态库链接库 程序运行时查找的顺序是:当前路径 -> 系统路径
手动复制到工程目录 可以吗
[/Quote]

那库和头文件我都放到工程目录下面了的, 编译器应该是可以检测到库和头文件,因为我把它删除就提示找不到文件, 但就是提示函数: undefined reference to "add(int, int)"
好郁闷的问题、、
ZRYXS 2011-07-25
  • 打赏
  • 举报
回复
那库和头文件我都放到工程目录下面了的, 编译器应该是可以检测到库和头文件,因为我把它删除就提示找不到文件, 但就是提示函数: undefined reference to "add(int, int)"
好郁闷的问题、、
念茜 2011-07-25
  • 打赏
  • 举报
回复
INCLUDEPATH += ../
LIBS +=./libabc.so


No such file: File format not recognized????

右键添加库,用这样的方式来做,还是提示找不到函数 肯定是路径的问题呀

动态库链接库 程序运行时查找的顺序是:当前路径 -> 系统路径
手动复制到工程目录 可以吗

ZRYXS 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yiyaaixuexi 的回复:]

TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += ../
LIBS += ../
[/Quote]
这样写不行吧,提示:
No such file: File format not recognized

我直接在用qt creator打开的pro文件里面,右键添加库,用这样的方式来做,还是提示找不到函数,晕、、、、
念茜 2011-07-25
  • 打赏
  • 举报
回复
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += ../
LIBS += ../



念茜 2011-07-25
  • 打赏
  • 举报
回复
对不起 我傻了
gcc -fpic -shared -o libabc.so abc.c 看到gcc了还VC呢
ZRYXS 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yiyaaixuexi 的回复:]

VC写的动态链接库是通过QLibrary调用的。
[/Quote]

跟VC没有关系,是在ubuntu下面用gcc编译生成的库,我写了一个测试程序main.c:
#include "abc.h"
#include <stdio.h>
int main()
{
printf("The add result is:%d\n", add(20, 30));
exit(0);
}

这样编译运行都没有问题的,说明库是OK的
念茜 2011-07-25
  • 打赏
  • 举报
回复
VC写的动态链接库是通过QLibrary调用的。
ZRYXS 2011-07-25
  • 打赏
  • 举报
回复


折磨人啊、
ZRYXS 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbzhang800 的回复:]

先确认一下:你不是在C++中调用你这个库中的函数吧?
[/Quote]
是在C++里面调用的, QT嘛、
dbzhang800 2011-07-25
  • 打赏
  • 举报
回复
先确认一下:你不是在C++中调用你这个库中的函数吧?

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧