当前位置: 技术问答>linux和unix
200分求解:程序中同时用到共享库(.so)、静态库(.a),编译时gcc的参数该如何设置?
来源: 互联网 发布时间:2015-07-15
本文导语: 一贴只能给到100分,问题解决马上开贴再补一百分! 我想在一个.so中调用.a,普通程序通过.so实现对.a的调用,下面是过程拷贝 [will@databack atoso]$ more libso.c #include #include "libso.h" #include "libatest.h" void calla() { ...
一贴只能给到100分,问题解决马上开贴再补一百分!
我想在一个.so中调用.a,普通程序通过.so实现对.a的调用,下面是过程拷贝
[will@databack atoso]$ more libso.c
#include
#include "libso.h"
#include "libatest.h"
void calla()
{
atest(); //call from a static library(libatest.a)
printf(".a convet to .so is okn");
return;
}
[will@databack atoso]$ more run.c
#include
#include "libso.h"
#include "libatest.h"
int main()
{
calla();
printf("oh ,3ksn");
return 0;
}
[will@databack atoso]$ gcc run.c -o run -I. -L. -static -latest -shared -lso
[will@databack atoso]$ ls -lF
总用量 44
-rw-r--r-- 1 will will 950 7月 18 22:24 libatest.a
-rw-r--r-- 1 will will 13 7月 18 22:24 libatest.h
-rw-r--r-- 1 will will 144 7月 18 22:30 libso.c
-rw-r--r-- 1 will will 14 7月 18 22:27 libso.h
-rw-r--r-- 1 will will 900 7月 18 22:31 libso.o
-rw-r--r-- 1 will will 6648 7月 18 22:32 libso.so
-rw-r--r-- 1 will will 116 7月 18 23:15 log.txt
-rwxr--r-- 1 will will 6582 7月 18 23:11 run*
-rw-r--r-- 1 will will 128 7月 18 22:39 run.c
[will@databack atoso]$ ./run
段错误
这样(gcc run.c -o run -I. -L. -static -latest -shared -lso)编译后为什么运行出错呢?
我想在一个.so中调用.a,普通程序通过.so实现对.a的调用,下面是过程拷贝
[will@databack atoso]$ more libso.c
#include
#include "libso.h"
#include "libatest.h"
void calla()
{
atest(); //call from a static library(libatest.a)
printf(".a convet to .so is okn");
return;
}
[will@databack atoso]$ more run.c
#include
#include "libso.h"
#include "libatest.h"
int main()
{
calla();
printf("oh ,3ksn");
return 0;
}
[will@databack atoso]$ gcc run.c -o run -I. -L. -static -latest -shared -lso
[will@databack atoso]$ ls -lF
总用量 44
-rw-r--r-- 1 will will 950 7月 18 22:24 libatest.a
-rw-r--r-- 1 will will 13 7月 18 22:24 libatest.h
-rw-r--r-- 1 will will 144 7月 18 22:30 libso.c
-rw-r--r-- 1 will will 14 7月 18 22:27 libso.h
-rw-r--r-- 1 will will 900 7月 18 22:31 libso.o
-rw-r--r-- 1 will will 6648 7月 18 22:32 libso.so
-rw-r--r-- 1 will will 116 7月 18 23:15 log.txt
-rwxr--r-- 1 will will 6582 7月 18 23:11 run*
-rw-r--r-- 1 will will 128 7月 18 22:39 run.c
[will@databack atoso]$ ./run
段错误
这样(gcc run.c -o run -I. -L. -static -latest -shared -lso)编译后为什么运行出错呢?
|
这个简单吧,
你先编译那个动态连接库
gcc -shared -o libso.so libso.c libatest.a
然后再编译可执行程序
gcc -o run run.c -L. -lso
应该ok
运行run时应该把*.so文件拷贝到/lib目录
或者设置LD_LIBRARY_PATH环境变量
你先编译那个动态连接库
gcc -shared -o libso.so libso.c libatest.a
然后再编译可执行程序
gcc -o run run.c -L. -lso
应该ok
运行run时应该把*.so文件拷贝到/lib目录
或者设置LD_LIBRARY_PATH环境变量