Я пытаюсь сделать статическую библиотеку из класса, но при попытке использовать его, я всегда получаю ошибки с неопределенными ссылками на чем-либо. Путем я продолжал двигаться, создавал объектный файл как
g++ -c myClass.cpp -o myClass.o
и затем упаковка его с
ar rcs myClass.lib myClass.o
Существует что-то, что я, очевидно, пропускаю обычно с этим. Я держал пари, что это - что-то с символами. Спасибо за любой совет я знаю, что это - по всей вероятности что-то, что я мог узнать при чтении некоторого учебного руководства очень жаль при беспокойстве глупым материалом снова :)
myClass.h:
class myClass{
public:
myClass();
void function();
};
myClass.cpp:
#include "myClass.h"
myClass::myClass(){}
void myClass::function(){}
программа с помощью класса:
#include "myClass.h"
int main(){
myClass mc;
mc.function();
return 0;
}
наконец я компилирую его как это:
g++ -o main.exe -L. -l myClass main.cpp
ошибка является просто классической:
C:\Users\RULERO~1\AppData\Local\Temp/ccwM3vLy.o:main.cpp:(.text+0x31): undefined
reference to `myClass::myClass()'
C:\Users\RULERO~1\AppData\Local\Temp/ccwM3vLy.o:main.cpp:(.text+0x3c): undefined
reference to `myClass::function()'
collect2: ld returned 1 exit status
Это вероятно проблема порядка ссылок. Когда компоновщик GNU видит библиотеку, он отбрасывает все символы, которые ему не нужны. В этом случае ваша библиотека появляется перед вашим файлом .cpp, поэтому библиотека удаляется до компиляции файла .cpp. Сделайте следующее:
g++ -o main.exe main.cpp -L. -lmylib
или
g++ -o main.exe main.cpp myClass.lib
Компоновщик Microsoft не учитывает порядок библиотек в командной строке.
Использование:
g++ -o main.exe main.cpp myClass.lib
Использование пути к библиотеке и флага -l чревато проблемами, но если вы должны это сделать, переименуйте вашу библиотеку в libmylib. a, а затем скомпилировать как:
g++ -o main.exe main.cpp -L. -lmylib
Обратите также внимание на то, что по причинам переносимости обычно плохая идея использовать смешанный регистр в именах исходных или выходных файлов.