我会尽力为您翻译中文。以下是需要翻译的内容:
在下面的例子中,我收到了一个“未定义引用”的错误。我看到很多与此问题相关的问题,但相信我给出了一个剥离、可重现、概念性的例子,而不是其他问题中的具体问题。
dynlib.h:
void printMe_dyn();
dynlib.c:
#include <stdio.h>
#include "dynlib.h"
void printMe_dyn() {
printf("I am execuded from a dynamic lib");
}
myapp.c:
#include <stdio.h>
#include "dynlib.h"
int main()
{
printMe_dyn();
return 0;
}
构建步骤:
gcc -Wall -fpic -c dynlib.c
gcc -shared -o libdynlib.so dynlib.o
gcc -Wall -L. -ldynlib myapp.c -o myapp
错误:
/tmp/ccwb6Fnv.o: In function `main':
myapp.c:(.text+0xa): undefined reference to `printMe_dyn'
collect2: error: ld returned 1 exit status
证明该符号在库中:
nm libdynlib.so | grep printMe_dyn
00000000000006e0 T printMe_dyn
- 我使用的编译器标志是否正确,用于构建动态库?
- 我提供的证明是否真的是无歧义的证明?
- 还有哪些方法可以采取来诊断这个问题?