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

时间:2014-03-03 12:28:31

标签: c++ c eclipse undefined-reference gcc4.4

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

我使用Eclipse 3.6.1和GCC 4.4.7在Linux Red Hat平台上。

我正在将一个大型项目从Solaris工作室(它工作的地方)移植到Eclipse。 我有C ++ Static Library项目(例如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*/
}

我有另一个C ++静态lib项目(例如Factory_Lib),其方法是Do_Transform(),它从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;
}

工作人员拒绝构建(链接),“对foo()的未定义引用”。

如果对foo()的调用是从strong的main()直接完成,则问题不会出现!

在Worker项目中,我尝试在 Settings-&gt; Linker 引用中引用 Reference projects 中的Common_Lib作为附加库 -l <​​/ em>在链接器没有 引用的项目等等。我尝试了很多组合,但没有成功。

我该怎么做才能让它发挥作用?!?!?我已经没想完了。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

由于您拥有Common_Lib和Factory_Lib的代码,为什么不使用通用的c ++编译器本身编译它们。我的意思是将两个库编译为C ++库(除了从transformation.h中删除extern“C”之外,不需要进行代码更改)

我不明白为什么你需要extern在这里?这里没有涉及C编译器。这两个库都是C ++。

答案 1 :(得分:0)

您可以通过以下方式获得运气:-lFactory -lCommon,订单很重要。