對於以下示例,我得到一個undefined reference
錯誤。我已經看到了很多的問題,涉及到這個問題,但認爲我給了一個精簡的,可重複,概念例如在其他問題而不是具體的問題,未定義的引用錯誤,但存在於庫中的符號
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
- 我使用了正確的編譯器標誌構建動態 庫?
- 我提出的證據確實是一個明確的證據嗎?
- 還有什麼其他方法可以診斷問題?