Eclipse: C-код в C ++ static lib, на который ссылается C ++ lib, приводит к неопределенной ссылке

Я прочитал почти все темы «неопределенная ссылка» здесь, потратил 2 дня, пробуя разные варианты ссылок, но безрезультатно. Я в отчаянии!

Я на платформе Linux Red Hat с Eclipse 3.6.1 и GCC 4.4.7.

Я портирую большой проект из студии Solaris (где он работает) на Eclipse.
У меня есть проект C ++ Static Library (например, Common_Lib), который включает в себя файлы преобразований .c + .h — чистый C-код.

Файл преобразование .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 (), который вызывает foo () из transfors.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 ++ (например, рабочий), который вызывает Do_Transform () Factory_Lib, который вызывает foo ().

#include factory.h

int main
{
CFactory fact = new CFactory();
int x=0;

fact.Do_Transform(&x);

return 0;
}

Работник отказывается быть построенным (связанным)неопределенная ссылка на foo ()«появляется.

Если вызов foo () сделан непосредственно из main () Worker, проблема не появляются!

В проекте Worker я пытался ссылаться на Common_Lib в Референтные проекты, в Настройки-> Linker ссылки, как дополнительные библиотеки -L в компоновщике без Ссылочные проекты, и т.д. Я перепробовал много комбинаций, но безуспешно.

Что я должен сделать, чтобы это работало?!?!? У меня закончились идеи.

Заранее спасибо!

0

Решение

Вы можете получить удачу следующим: -lFactory -lCommon порядок важен.

0

Другие решения

Поскольку у вас есть код как Common_Lib, так и Factory_Lib, почему бы вам не скомпилировать оба с использованием самого общего компилятора c ++. Я имею в виду скомпилировать обе библиотеки в виде библиотеки C ++ (не нужно никаких изменений кода, кроме как удалить extern «C» из translation.h)

Я не понимаю, зачем тебе нужен экстерн? Здесь не задействован компилятор C Обе библиотеки C ++.

0

По вопросам рекламы [email protected]