私は実際に別の関数b
(libb.aに保管されています)からa
(liba.aに保管されている)関数を呼び出しようとしていますが、リンケージエラーがあります。2つの静的ライブラリにプログラムをリンクすると、それぞれが別の関数に依存する関数を含んでいますか?
私のファイルがあります。
a.c
#include <stdio.h>
void a()
{
printf("a\n");
}
b.c
void a();
void b()
{
a();
}
main.cの
void b();
int main(int argc, char const* argv[])
{
b();
return (0);
}
そして、どのように私は
をコンパイルgcc -c a.c
gcc -c b.c
ar rc liba.a a.o
ar rc libb.a b.o
ranlib liba.a
ranlib libb.a
gcc main.c liba.a libb.a
(正確なメッセージ・エラー)
b.c:(.text+0xa): undefined reference to `a'
は、私が何をしようとしている実行する方法はありますか? お返事ありがとうございます
EDIT: コマンドラインのライブラリの順序が重要になるようです。 しかし、私の実際の問題ではlibAはlibBに依存しており、libBはlibA(MCVEコードでは説明していません)に依存しています。
注文を交換すると何か変わりますか? 'gcc main.c libb.a liba.a' – melpomene
コマンドラインでのライブラリの順序は重要です。ライブラリBがライブラリAに依存する場合、BはコマンドラインでAの前に来なければなりません。 –
http://c-faq.com/lib/libsearch.html – melpomene