Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Eclipse:C+中的C代码+;静态库,由C+引用+;lib导致未定义的引用_C++_C_Eclipse_Undefined Reference_Gcc4.4 - Fatal编程技术网

C++ Eclipse:C+中的C代码+;静态库,由C+引用+;lib导致未定义的引用

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

我已经阅读了这里几乎所有的“未定义引用”主题,花了2天时间尝试不同的链接选项,但没有结果。我绝望了

我使用的是带有Eclipse3.6.1和GCC4.4.7的Linux Red Hat平台

我正在将一个大型项目从Solaris studio(它工作的地方)移植到Eclipse。 我有C++静态库项目(例如,公共库),其中包括转换.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*/
}

我有另一个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;
}