C++ Eclipse:C+中的C代码+;静态库,由C+引用+;lib导致未定义的引用
我已经阅读了这里几乎所有的“未定义引用”主题,花了2天时间尝试不同的链接选项,但没有结果。我绝望了 我使用的是带有Eclipse3.6.1和GCC4.4.7的Linux Red Hat平台 我正在将一个大型项目从Solaris studio(它工作的地方)移植到Eclipse。 我有C++静态库项目(例如,公共库),其中包括转换.c+.h文件-纯C代码。 transformations.h文件用C++ Eclipse:C+中的C代码+;静态库,由C+引用+;lib导致未定义的引用,c++,c,eclipse,undefined-reference,gcc4.4,C++,C,Eclipse,Undefined Reference,Gcc4.4,我已经阅读了这里几乎所有的“未定义引用”主题,花了2天时间尝试不同的链接选项,但没有结果。我绝望了 我使用的是带有Eclipse3.6.1和GCC4.4.7的Linux Red Hat平台 我正在将一个大型项目从Solaris studio(它工作的地方)移植到Eclipse。 我有C++静态库项目(例如,公共库),其中包括转换.c+.h文件-纯C代码。 transformations.h文件用 #ifndef TRANSFORMATIONS_H_ #define TRANSFORMATIONS
#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*/
}
我有另一个C++静态LIB项目(例如,FasyYyLIB),方法dox TrimeAd(),它从转换调用h()。这个项目建得很好
#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++项目(例如,Word),调用FaseYyLIB的DOAXTRORE(),调用DOWER()/<
工作进程拒绝生成(链接),“未定义对foo()的引用”出现
如果直接从Worker的main()调用foo(),则问题不会出现
在Worker项目中,我尝试引用引用项目中的公共库,在设置->链接器引用中,作为附加库-l在链接器中引用,而不引用引用的项目,等等。我尝试了许多组合,但没有成功
我必须做什么才能让它工作?!?!?我已经没有主意了
提前谢谢你 >你有两个通用代码和FIFYYLYLB代码,为什么不使用通用的C++编译器本身编译它们呢?我的意思是将LIBS编译为C++库(除了从转换中删除外部的C)之外不需要代码更改。
我不明白你为什么需要外人?这里没有涉及C编译器。LIBS都是C++ C++。 您可能会得到如下的运气:<代码> -Lase- LUng/<代码>,顺序很重要。< /P>您是否在转换中具有了?该文件是用gcc而不是g++编译的。其中的代码仅为C,并且必须保持为C。在创建worker时,是否已针对这两个存档进行了链接。另一方面,我看不出有什么问题。谢谢!这解决了我的问题!但我不明白为什么。你能解释一下这背后的逻辑吗?
#include factory.h
int main
{
CFactory fact = new CFactory();
int x=0;
fact.Do_Transform(&x);
return 0;
}