[英]LD: Linking a shared library to a static library
我正在尝试将static library
与shared library
链接,这引发了一个错误recompile with -fPIC
这是我尝试使用的示例:
savari@Ramana:~/Junk$ cat common.h
#include <stdio.h>
#include <stdlib.h>
void func1(int *p);
void func2();
共享库代码:
savari@Ramana:~/Junk$ cat shared.c
#include "common.h"
void func2()
{
int i=10;
func1(&i);
}
和静态库代码:
#include "common.h"
int k;
void func1(int *p)
{
printf("%d\n", *p);
}
现在,看到共享库使用静态库的API。
这是我的编译方式:
gcc -c static.c
ar rcs libStatic.a static.o
gcc -c shared.c
gcc -shared -fPIC -o libShared.so shared.o -L. -lStatic
最后一条命令后,出现以下错误:
/usr/bin/ld: ./libStatic.a(static.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
./libStatic.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
我实际上是从供应商那里获得的static library
,我正在尝试在其上构建一个shared library
。 我没有静态库的来源。
我收到其他类型的错误信息:
relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
error adding symbols: Bad value
collect2: error: ld returned 1 exit status
我读了很多文章,但无法弄清楚。 请帮我解决这个问题。
参考文献:
在上面的示例中,在为静态库编译目标文件时需要使用-fPIC
。 如果省略此选项,则编译后的代码将无法包装到共享库中。 如果您只有静态库而没有源代码,那么您将无能为力。 请库的创建者为您提供启用-fPIC
的编译器。
试试这个静态链接libStatic.a:
gcc -shared -fPIC -o libShared.so shared.o -L. -Wl, -Bstatic -lStatic
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.