c++ - Eclipse:C++静态库中的C代码,由C++库引用导致 undefined reference

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

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

我使用的是带有 Eclipse 3.6.1 和 GCC 4.4.7 的 Linux Red Hat 平台。

我正在将一个大型项目从 Solaris studio(它可以工作的地方)移植到 Eclipse。 我有 C++ 静态库项目(例如 Common_Lib),其中包括 conversions.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() 从 conversions.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() 的 undefined reference ”。

如果从 Worker 的 main() 中直接调用 foo(),则不会出现问题!

在 Worker 项目中,我尝试在引用项目设置->链接器引用中引用 Common_Lib,作为附加库-l> 在链接器中没有引用的项目等。我尝试了很多组合,但没有成功。

我必须做什么才能让它发挥作用?!?!?我已经没有主意了。

提前谢谢您!

最佳答案

您可能会通过以下方式获得好运: -lFactory -lCommon ,顺序很重要。

关于c++ - Eclipse:C++静态库中的C代码,由C++库引用导致 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146822/

相关文章:

c - 我的自定义操作系统内核中的 VGA 显示问题

c - lex 和 yacc — 组合两个词法分析器和一个 yacc

eclipse - 从 Eclipse 迁移到 Android Studio 后保留 Git 历史的问题

c++ - 具有相同名称的不同功能模板之间的重载优先级

c++ - 使用 3 个位置和法线进行光线追踪的内插三角形表面的最佳方法

c++ - libmysql mysql_real_connect 因 IP 地址而失败,但适用于 localhost

c++ - C/C++ : Deallocating or deleting a block of dynamically created memory

c - 在低级别写入文件

android - 无法在 Android Studio 中导入 org.apache.http.HttpResponse

android 模拟器什么都不做,闪烁进出,或者说运行的实例过多。