Проблемы со ссылками на g ++: неопределенная ссылка на функции - PullRequest
2 голосов
/ 18 августа 2010

Я использовал CMake и Visual C ++ для создания библиотеки HyDE.Затем, еще в VC ++, я смог успешно создать код и создать исполняемый файл, который ссылается на HyDE.lib и заголовочные файлы HyDE.

Затем я обнаружил, что для работы с другими в моей компании онбыло бы предпочтительнее разрабатывать в Eclipse CDT.Зная очень мало о Eclipse CDT, я создал проект hello world по умолчанию, удалил код и затем поместил весь мой код в папку src.Затем я попытался изменить пути include и lib и libs, чтобы отразить то, что работало в VC ++.В этот момент все, кажется, компилируется, но я получаю сообщение об ошибке:

/ cygdrive / c / EclipseWorkspace / 425HyDE / Debug /../ src / FS5HyDE.cpp: 16: неопределенная ссылка на`HyDEAPI :: HyDE :: HyDE (HyDESystemModel :: SystemModel *, bool) '

(Есть еще много подобных ошибок, все ссылаются на методы HyDE.) Вот что выполняетсякомандная строка:

g ++ -L "C: \ Progra ~ 1 \ boost \ boost_1_42 \ lib" -L "C: \ EclipseWorkspace \ HyDE" -o "425HyDE.exe" ./src/Adapter_FS5HyDE.o ./src/EPSCommands.o ./src/EPSCurrentSensor.o ./src/EPSFault.o ./src/FS5HyDE.o ./src/HyDEObservation.o ./src/MCDH.o ./scMCDH_Module.o ./src/PDBComponent.o ./src/PowerSystem.o ./src/Program.o ./src/SSPCComponent.o ./src/Telemetry.o ./src/TelemetryReport.o -l: libboost_thvc90-mt-gd-1_42.lib -lHyDE

Это определенно не проблема с упорядочением библиотек, потому что у меня есть и другой порядок (всего два).Возможно ли, что есть проблема с компиляцией HyDE.lib в VC ++ (который использует компилятор Windows) и компиляцией моей программы с g ++?Может ли быть проблема в том, что Eclipse CDT автоматически генерирует make-файлы?Любые другие идеи?

(Примечание: кажется, что есть много других вопросов по SO с аналогичными проблемами, но после прочтения их мне еще не удалось найти такой, который решает мою проблему.)

Ответы [ 3 ]

1 голос
/ 19 августа 2010

Решение: поскольку библиотека HyDE была скомпилирована с помощью компилятора Visual Studios, и я пытаюсь создать код, который ссылается на нее с помощью цепочки инструментов Cygwin, два компилятора используют разные схемы преобразования имен, так что последний компоновщик не может найти ожидаемые символы в библиотеке HyDE. Единственное решение, которое я нашел, - это перекомпилировать библиотеку HyDE с помощью цепочки инструментов Cygwin или , скомпилировать новый код с любым компилятором, который использует Visual Studios. (ворчание ворчание)

1 голос
/ 18 августа 2010

Классическая ошибка отсутствующего символа. Какой исходный файл определяет:

HyDEAPI::HyDE::HyDE(HyDESystemModel::SystemModel*, bool)'?

Был ли этот файл добавлен в компиляцию? Можете ли вы найти его в командной строке, которую вы вставили?

Если этот символ принадлежит внешней библиотеке, после добавления пути к каталогу с помощью -L, вы можете добавить имя конкретной библиотеки, которую вы хотите связать с вашей программой, используя -l.

Я собираюсь предложить вам попытаться добавить в команду компиляции путь к каталогу HyDE.lib, за которым сразу следует имя библиотеки, например:

 -L"C:\path_to_hyde_library" -l:HyDE.lib

и затем расскажите нам, что случилось.

0 голосов
/ 18 августа 2010

./src/FS5HyDE.o и ./src/HyDEObservation.o должны быть последним параметром, если другие объектные файлы (* .o файлы) нуждаются в их, это означает, что самый необходимый object files долженпоявится в списке параметров как можно дольше.

...