Импорт встроенных функций в MinGW
Я использую разделяемую библиотеку, которая определяет встроенные функции в своем заголовке.
Вот сокращенный тестовый пример, как видно из ссылки на библиотеку модуля компиляции (для версии, видимой библиотекой, просто заменитеdllimport
отdllexport
).
class __declspec(dllimport) MyClass {
public:
int myFunc2();
int myFunc1();
};
inline int MyClass::myFunc2(void) {
return myFunc1();
}
inline int MyClass::myFunc1(void) {
return 0;
}
Компиляция этого дает предупреждение:
warning: 'int MyClass::myFunc1()' redeclared without dllimport attribute after being referenced with dll linkage [enabled by default]
Обратите внимание, что порядок, в котором определяются функции, важен, так как определениеmyFunc1
до определенияmyFunc2
не приводит к предупреждениям.
Также обратите внимание, что этот код компилируется без предупреждений в Visual C ++. Эти предупреждения относятся, по крайней мере, к MinGW, может быть, к GCC в целом. Изменить: мне пришло в голову, что мне, возможно, придется проверить, не блокируется ли предупреждение одним из флагов, установленных проектом.
Мои вопросы тогда:
Why this behavior ? DeclaringmyFunc1
as inline
inside the class declaration fixes the problem. Why is that ? It's also against the recommended way of doing things.
Is there another (better ?) way to fix this problem ?