Почему я получаю "неопределенную ссылку на" glibtop_init "во время компоновки? - PullRequest
1 голос
/ 13 февраля 2010

Я строю очень маленький проект C / C ++, используя eclipse, и получаю следующее во время сборки:

make all<br> Building file: ../Metric.cpp<br> Invoking: GCC C++ Compiler<br> g++ -I/usr/include/glib-2.0 -I/usr/include/libgtop-2.0 -I/usr/lib/glib-2.0/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"Metric.d" -MT"Metric.d" -o"Metric.o" "../Metric.cpp"<br> Finished building: ../Metric.cpp<br>

Building target: linuxMonitor<br> Invoking: GCC C++ Linker<br> g++ -L/usr/lib -o"linuxMonitor" ./Metric.o<br> ./Metric.o: In function <code>main':<br> /home/mike/workspace_c/linuxMonitor/Debug/../Metric.cpp:27: undefined reference to glibtop_init '
collect2: ld вернул 1 статус выхода
make: *** [linuxMonitor] Ошибка 1

Что я не могу понять, так это то, почему не удается установить связь или какие флаги связывания использовать, чтобы эта проклятая вещь работала! -L/usr/lib должен указывать компоновщик на каталог, в котором находится библиотека, но он все равно не работает. Когда я делаю -l/usr/lib/myLibrary.a, он все равно не может сказать, что не может найти -l/usr/lib/myLibrary.a

Буду признателен за любые советы или рекомендации по использованию правильных команд для компоновщика! Я застрял!

-Mike

Ответы [ 2 ]

1 голос
/ 13 февраля 2010

Ваш библиотечный файл должен быть libsomething.a, а опция g ++ -lsomething

Более подробно об этом написано в man-странице g ++:

-l library

...

The linker searches a standard list of directories for the library,
which is actually a file named liblibrary.a.  The linker then uses
this file as if it had been specified precisely by name.

The directories searched include several standard system
directories plus any that you specify with -L.

...

The only difference between using an -l option and
specifying a file name is that -l surrounds library with lib and .a
and searches several directories.
0 голосов
/ 13 февраля 2010

В

g++ -L/usr/lib -o"linuxMonitor" ./Metric.o

вы не указываете какую-либо библиотеку.

Кроме того, -l/usr/lib/myLibrary.a не так, вы должны переименовать вашу библиотеку в libmyLibrary.a и затем использовать -lmyLibrary. Если вы не можете этого сделать, тогда вам нужно g++ -o linuxMonitor ./Metric.o /usr/lib/myLibrary.a.

...