【发布时间】:2018-10-09 20:17:53
【问题描述】:
我正在尝试编译以下测试文件以创建共享库:
answer.c
#include <stdio.h>
#include "add.h"
extern int myvar();
int answer()
{
printf("\r\n myvar:%d \r\n", myvar());
setSummand(20);
return add(22); // Will return 42 (=20+22)
}
添加.c
#include <stdio.h>
int gSummand;
void setSummand(int summand)
{
printf("1Library is initialized\n");
gSummand = summand;
}
int add(int summand)
{
return gSummand + summand;
}
我想从 2 个文件“answer.c”“add.c”创建一个共享库,我正在使用以下命令:
gcc -c answer.c -o answer.o
gcc -c add.c -o add.o
gcc -shared add.o answer.o -o libtest.so
但是第三个命令给出以下错误:
answer.o:answer.c:(.text+0x9): undefined reference to `myvar'
answer.o:answer.c:(.text+0x9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `myvar'
collect2: error: ld returned 1 exit status
如果我使用以下命令创建静态库而不是动态库,则相同的设置链接成功。因此,如果我尝试以下命令,我看不到任何错误:
ar rcs libtest.a add.o answer.o
想知道我是否在这里遗漏了什么。也想知道如何在共享库中使用外部符号。
【问题讨论】:
标签: c gcc shared-libraries linker-errors extern