2009-11-27 11 views
2

Я пытаюсь Скомпилируйте свою программу на Windows, с помощью Cygwin с помощью команды компиляции:C++ GNU Linker Ошибка

g++ ping.cpp -I./include -L./lib -lchartdir50 

Я использую API под названием ChartDirector, который рисует диаграммы для меня. Я никогда раньше не связывал библиотеки таким образом (обычно я делаю это через Visual Studio), поэтому я немного новичок в этом. У меня действительно большой список ошибок, поэтому я не буду перечислять их все, но я перечислю один раз, чтобы уточнить тип ошибки компоновщика я получаю:

(.text$_ZN9BaseChartD1Ev[BaseChart::~BaseChart()]+0x4f): undefined reference to '_CBaseChart_destroy' 

Все эти неопределенная ссылка на ошибки «xxx».

Я получил кучу файлов заголовков в ./include и библиотеку под названием chartdir50.lib в ./lib

Что не так с моей компиляции строки?

ответ

1

Хм ... это странно. Я использую 64-битную систему, но по какой-то причине я попробовал ее с 32-битной библиотекой и скомпилировал ее. Благодаря!

+1

Ваша система может быть 64 бит, но я сомневаюсь, что это компилятор. – Clifford

1

Я не уверен, но .lib были скомпилированы с Visual C++?

Если да, то я не думаю, что он совместим с GCC, вам нужно скомпилировать библиотеку с GCC/G ++ и использовать этот файл или использовать совместимый двоичный файл, если у вас нет доступа к источнику.

+0

Я попытался скомпилировать его в визуальной студии, и у меня были подобные ошибки. ping.obj: ошибка LNK2019: неразрешенный внешний символ _CBaseChart_makeChart ссылки в функции "общественности: BOOL __thiscall BaseChart :: makeChart (символ сопз *)" (? MakeChart @ BaseChart @@ QAE_NPBD @ Z) – Ring

+0

GCC 4.x свяжет MS библиотеки объектов. – Clifford

+0

@Clifford: спасибо за подсказку – RageZ

0

Я предполагаю, что lib был создан с помощью gcc.

AFAIK .lib - это статическая библиотека, поэтому вам не нужно указывать ее с помощью -l-компилятора.

Просто используйте его в качестве другого файла в командной строке, например

г ++ ping.cpp -I./include -L./lib {путь к импровизировать здесь} /chartdir50.lib

HTH.

+0

Связывание файла с -l или указание полного пути эквивалентны, так что это не повлияет на ситуацию. –

+0

Пробовал, те же ошибки. – Ring

+0

-l связывает статические библиотеки или библиотеки DLL/разделяемой библиотеки, это не имеет значения. Также GCC 4.x свяжет библиотеки объектов MS. – Clifford

1

Я никогда не использую эту библиотеку раньше, но когда я googled, я заметил, что другие люди пытаются как -lchartdir вместо -lchartdir50, так что вы должны дать ему попробовать.

+0

Я попытался добавить библиотеку Linux «libchartdir.so.5.0.0» в ./lib/, а затем изменить мою командную строку: г ++ ping.cpp -I./include -L./lib/chartdir I получили те же точные ошибки. – Ring

Смежные вопросы