Как получить объявление и определение функции в разных статических библиотеках

0

Я хотел бы, чтобы это произошло. Уметь объявлять функцию в одной статической библиотеке, а ее определение - в другой. Вот пример:

В LibA.a

// Foo.h
class Foo
{
public:
   void Bar() const;

};

В LibB.a

// FooPlatformSpecific.h
inline void Foo::Bar() const
{

}

А затем в LibC.dylib

// Myfile.cpp
#include "Liba/Foo.h"
void useTheFunction()
{
   Foo foo;
   foo.Bar();
}

Некоторые комментарии мне нужно сделать Bar inline, чтобы он не генерировал повторяющийся символ. Теперь моя проблема в том, что она не связывает это, дает мне неопределенный символ.

Решение состоит в том, чтобы сделать определение бара не встроенным и в cpp LibB.a, но это помешает встроенным возможностям для компилятора.

Есть ли способ обойти это?

  • 2
    не совсем понимаю, «сделать Bar встроенным, чтобы он не генерировал дублирующий символ». Также вам нужно поместить реализацию в тот же CU, если вы действительно хотите, чтобы функция была встроенной.
Теги:
linker
inline

1 ответ

0

Это не сработает, поскольку объявление находится в заголовке, а определение - в библиотеке. Поэтому они уже разделены, если вы объявляете в .h и реализуете в .cpp.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню