Suse 11 x86マシンでACE6.0.2を使用しています。gccのバージョンは4.3で、ACE-TAOlibは問題なくコンパイルされています。
私がやりたかったテストは非常に単純ですが、合格することはできません。
私は3つのファイルを持っています。a1.hはクラスAを定義します。
class A
{
public:
A();
void print();
};
a1.cppには、ACElibからメソッドを呼び出す関数があります。
#include "a1.h"
#include <ace/Thread.h>
#include <iostream>
A::A(){}
void A::print()
{
long t=ACE_Thread::self();
std::cout<<t<<std::endl;
}
main.cppはクラスAからprint()を呼び出します
#include "a1.h"
int main()
{
A a;
a.print();
return 0;
}
私が使用したコンパイルコマンドは次のとおりです。
1.ACE_threadを使用してa1.oを生成します
g ++ -c -fPIC -fno-strict-aliasing -fvisibility = hidden -fvisibility-inlines-hidden -O3 -ggdb -pthread -Wall -W -Wpointer-arith -pipe -D_GNU_SOURCE -I / opt / ACE_wrappers -DACE_HAS_VALGRIND -D__ACE_INLINE__- I .. -Wl、-E -L / opt / ACE_wrappers /lib-L。-o a1.o a1.cpp
2.共有libT.soを生成します
g ++ -pthread -Wl、-O3 -shared -o libT.so a1.o -Wl、-E -L / opt /ACE_wrappers-L。-L / opt / ACE_wrappers / lib -lACE -ldl -lrt
3.main.oを生成します
g ++ -c -fno-strict-aliasing -fvisibility = hidden -fvisibility-inlines-hidden -O3 -ggdb -pthread -Wall -W -Wpointer-arith -pipe -D_GNU_SOURCE -I / opt / ACE_wrappers -DACE_HAS_VALGRIND-D__ACE_INLINE__-I。 。-wl、-E -L / opt / ACE_wrappers /lib-L。-o main.o main.cpp -lACE -ldl -lrt
4.実行可能ファイルをリンクして生成します
g ++ -fno-strict-aliasing -fvisibility = hidden -fvisibility-inlines-hidden -O3 -ggdb -pthread -Wall -W -Wpointer-arith -pipe -D_GNU_SOURCE -I / opt / ACE_wrappers -DACE_HAS_VALGRIND -D__ACE_INLINE__ -I ..- Wl、-E -L / opt / ACE_wrappers /lib-L。-o main main.o -lT -lACE -ldl -lrt
手順4で問題が発生しました。
main.o: In function `main':
/main.cpp:5: undefined reference to `A::A()'
/main.cpp:6: undefined reference to `A::print()'
私はLinuxでC++を初めて使用しますが、なぜこれが発生するのかわかりません。コンパイルコマンドに問題があるはずです。よろしくお願いします。