私は次のCファイルを持っています:
Base.h:
void g();
void h();
Base.c:
#include <stdio.h>
#include <Base.h>
void g() {
printf("This is lib g\n");
h();
}
void h() {
printf("This is lib h\n");
}
交流:
#include <stdio.h>
#include <Base.h>
void h() {
printf("This is A h\n");
}
void main() {
g();
h();
}
私は次のようにコンパイルしてリンクします:
$ gcc -c -fPIC -o Base.o -I. Base.c
$ gcc -shared -o libBase.so Base.o
$ gcc -c -o A.o A.c
$ gcc -o A A.o -lBase -L.
今、私はプログラムを実行します
$ LD_LIBRARY_PATH=. ./A
取得します:
This is lib g
This is A h
This is A h
つまり、libBaseでのhの呼び出しは、Aoのhによって解決されます。これは私が期待したものではありません。ダイナミックリンカがlibBaseのhへの呼び出しをlibBaseのhで解決するか、4番目のgcc呼び出しでエラーメッセージを解決することを期待していました。
Acのhの名前をh1に変更すると
#include <stdio.h>
#include <Base.h>
void h1() {
printf("This is A h1\n");
}
void main() {
g();
h1();
}
取得します
This is lib g
This is lib h
This is A h1
したがって、この場合、hは予想どおりに解決されます。
エラーメッセージを取得するか、gの呼び出しをlibBaseのhに解決するにはどうすればよいですか?