I am using ACE6.0.2 on a Suse 11 x86 machine.The version of gcc is 4.3 and ACE-TAO lib has been compiled with no problem.
The test I wanted to do is very simple but it just can't pass.
I have three files. a1.h defines a class A.
class A
{
public:
A();
void print();
};
a1.cpp has a function invoking the method from ACE lib.
#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 invokes print() from class A
#include "a1.h"
int main()
{
A a;
a.print();
return 0;
}
The compiling command I used is:
1.generate a1.o with ACE_thread
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.generate shared 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.generate 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.link and generate the executable file
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
The problems occurred at step 4:
main.o: In function `main':
/main.cpp:5: undefined reference to `A::A()'
/main.cpp:6: undefined reference to `A::print()'
I am new to C++ under linux and don't understand why this happens. There must be something wrong with my compiling commands.Thanks for help in advance.