[英]Eclipse: C-code in C++ static lib, referenced by C++ lib results in undefined reference
我在这里阅读了几乎所有“未定义的参考”主题,花了2天的时间尝试不同的链接选项,但没有结果。 我很绝望!
我在具有Eclipse 3.6.1和GCC 4.4.7的Linux Red Hat平台上。
我正在将一个大型项目从Solaris Studio(在其工作的地方)移植到Eclipse。 我有C ++静态库项目(例如Common_Lib),其中包括Transformations.c + .h文件-纯C代码。
Transformations.h文件包装为
#ifndef TRANSFORMATIONS_H_
#define TRANSFORMATIONS_H_
#ifdef __cplusplus
extern "C" {
#endif
void foo(int *x);
#ifdef __cplusplus
}
#endif
#endif
/* transformations.c */
#include "transformations.h"
void foo(int *x)
{
/* calculations on x*/
}
我还有一个带有方法Do_Transform()的C ++静态库项目(例如Factory_Lib),该方法从Transformations.h调用foo()。 该项目构建正确。
#ifndef FACTORY_H
#define FACTORY_H
#include "transformations.h"
class CFactory
{
public:
void Do_Transform(int *x);
};
// factory.cpp
#include "factory.h"
void CFactory::Do_Transform(int *x)
{
foo(x);
}
最后一个-可执行文件-C ++项目(例如Worker),它调用Factory_Lib的Do_Transform(),后者调用foo()。
#include factory.h
int main
{
CFactory fact = new CFactory();
int x=0;
fact.Do_Transform(&x);
return 0;
}
Worker拒绝构建(链接),出现“ 对foo()的未定义引用 ”。
如果直接从Worker的main()调用foo(), 则不会出现问题!
在Worker项目中,我尝试在“ 参考”项目中的“设置”->“链接器”引用中引用 Common_Lib,作为链接器中没有 “ Referenced”项目的附加库-l等。我尝试了许多组合,但没有成功。
我必须怎么做才能使其正常工作?!?!? 我的想法已经用完了。
先感谢您!
当您拥有Common_Lib和Factory_Lib的代码时,为什么不使用公共c ++编译器本身来编译它们。 我的意思是将两个库都编译为C ++库(除了从Transformation.h中删除extern“ C”之外,无需更改代码)
我不明白为什么你需要在这里实习? 这里没有C编译器。 这两个库都是C ++。
您可能会遇到以下问题: -lFactory -lCommon
,顺序很重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.