【发布时间】:2012-11-17 23:03:21
【问题描述】:
我在 Suse 11 x86 机器上使用 ACE6.0.2。gcc 的版本是 4.3,ACE-TAO lib 编译没有问题。
我想做的测试很简单,但就是不能通过。
我有三个文件。 a1.h 定义了一个类 A。
class A
{
public:
A();
void print();
};
a1.cpp 有一个从 ACE 库调用方法的函数。
#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++ 新手,不明白为什么会发生这种情况。我的编译命令一定有问题。提前感谢您的帮助。
【问题讨论】:
-
几年前我在 ACE 工作。我所做的是我从 ACE 的发行版中获取了一个示例项目,删除了几乎所有的代码,然后开始添加我的代码,这最终成为一个非常大的项目。好消息是我使用了现有的构建系统,它适用于所有支持 ACE 的平台——各种商业 Unix、Linux 和 Windows。
标签: c++ linux g++ visibility