• 11747阅读
  • 15回复

如何调用静态库? [复制链接]

上一主题 下一主题
离线dayong419
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-16
— 本帖被 XChinux 执行加亮操作(2009-04-22) —
我用C编译一个静态库
但是在qt里不会调用,不知道怎么使用这个库?
帮忙啊
离线tsuibin

只看该作者 1楼 发表于: 2009-04-16
如何制作动态库?
离线visitorone

只看该作者 2楼 发表于: 2009-04-16
我也不会制作~~
离线dayong419
只看该作者 3楼 发表于: 2009-04-18
QT动态库我是这样做的:
template+=lib
这样make后生成的就是动态链接库了
离线dayong419
只看该作者 4楼 发表于: 2009-04-18
我把问题说的详细些吧,因为我也不清楚该怎么问.呵呵
生成静态库:
/*********************
mylib.h
/*********************
int add(int x,int y);
/*********************
mylib.c
/*********************
#include "mylib.h"
int add(int a, int b)
{
    return a+b ;
}
/*********************
运行命令
/*********************
gcc -c mylib.c
ar -rc libmylib.a mylib.o
现在问题是我不知道该怎么调用这个生成的静态库里的函数


谁给我解答下吧……
离线zhang25457

只看该作者 5楼 发表于: 2009-04-18
在MAKEFILE文件的LIBS项把这个库的路径和名加上就应该可以用了
离线zougw
只看该作者 6楼 发表于: 2009-04-19
楼上回答的对,也可以在.pro文件中把库的路径加进去.
离线dayong419
只看该作者 7楼 发表于: 2009-04-19
是这样子吗?请看下我的写法:
LIBS+=./libmylib.a
不知道对不对呢?请再指教!
呵呵呵
离线zougw
只看该作者 8楼 发表于: 2009-04-19
LIBS+= -L/你库的绝对路径 -lmylib
离线steinlee

只看该作者 9楼 发表于: 2009-04-21
add -shared in your make file

引用第1楼tsuibin于2009-04-16 21:25发表的  :
如何制作动态库?
Looking for remote C/C++ and Qt 兼职
离线guyansrg

只看该作者 10楼 发表于: 2009-04-21
首先,在 .pro 文件中设置
  LIBS +=  动态链接库文件路径          
  例子:LIBS += ./src/makedll.dll
接着,再使用 QLibrary library(动态链接库文件名) 读入动态链接库文件        
  例子:QLibrary library("makedll0.dll");
然后,再解析你写的函数,调用解析后的函数即可
  例子: typedef void (*MyPrototype)();
                  MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
                  if (myFunction)
                      myFunction();
离线mumu_doom
只看该作者 11楼 发表于: 2009-04-21
楼上的方法确实可行
不过怎样做到“直接include下库的头文件就可以调用库里的函数呢?”
做了试验 发现gcc生成的.so只可以像楼上说的那样加载 而g++生成的就可以隐式调用
同时在.pro文件中LIBS+=()
()中只可以为.so的绝对或相对路径 而如果用 -Llibpath -llibname则不可以

请高手帮忙解答下
qt如何调用其他工具比如gcc生成的动态静态库? (g++可以 qt自己生成的也可以)
离线mumu_doom
只看该作者 12楼 发表于: 2009-04-21
ok了 不是qt的原因 换作是用gcc编译的调用gcc生成的库也会不认识
解决方法:
假设你调用的库是 mylib 头文件是 mylib.h
在主调程序中 #include "mylib.h" 换成
extern "C"
{
    #include "mylib.h";
}
离线guyansrg

只看该作者 13楼 发表于: 2009-04-22
呵呵,问题解决了就好
离线dayong419
只看该作者 14楼 发表于: 2009-04-22
知道了,这样解决的:
extern "C"{
#include "add.h";
}
这样子在库里面的函数就可以直接使用了
呵呵
谢谢各位了
离线laplace1225
只看该作者 15楼 发表于: 2011-03-06
楼主是用gcc自己生成静态库*,a,这个还好说,参考网上的资料,分静态调用于动态调用两种,libs添加路径及文件名(不带扩展名),那如果用Qt去调用由VC,Borland C++等其他编译器产生的lib文件那该怎么办呢??
快速回复
限100 字节
 
上一个 下一个