Ide Netbeans (linux) ошибка при запуске любой C++ программы

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Здравствуйте. Возникла следующая проблема в NetBeans'е:
любая программа на C++, нормально компилируясь, при запуске выдает ошибку.
Например
программа
Код:
#include <cstdlib>
using namespace std;
int main(int argc, char** argv) 
{

return 0;
}
лог компилятора
Код:
ОЧИСТИТЬ SUCCESSFUL (общее время: 60мс)
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
g++	-c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp

ПОСТРОИТЬ SUCCESSFUL (общее время: 136мс)
лог запуска
Код:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Вход в каталог `/home/andrei/NetBeansProjects/CppApplication_1'
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/cppapplication_1
make[2]: Вход в каталог `/home/andrei/NetBeansProjects/CppApplication_1'
mkdir -p dist/Debug/GNU-Linux-x86
g++	 -o dist/Debug/GNU-Linux-x86/cppapplication_1 build/Debug/GNU-Linux-x86/main.o 
/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/cppapplication_1] Ошибка 1
make[2]: Выход из каталога `/home/andrei/NetBeansProjects/CppApplication_1'
make[1]: *** [.build-conf] Ошибка 2
make[1]: Выход из каталога `/home/andrei/NetBeansProjects/CppApplication_1'
make: *** [.build-impl] Ошибка 2

ПОСТРОИТЬ FAILED (значение выхода 2, общее время: 162мс)
Есть подозрение, что что-то напортачил в системе...
Пакет libm.so установлен. Из командной строки в таком виде
Код:
~/0$ gcc 0.c -L/usr/lib/i386-linux-gnu
все нормально компилируется и запускается, без указания адреса ошибка
collect2: ld returned 1 exit status
Надеюсь на вашу помощь.
Ранее обсуждение проблемы было здесь
 

a0z

Well-known member
15.03.2011
108
0
#2
Я в компиляции под линуксом не силён, но тем не менее, пару вопросов возникает.

1. Чёт не понятненько, почему лог линковки называется логом запуска?
Почему компилируется понятно - на этом этапе либы не нужны. Во время линковки библиотека libm не находится, и вываливается ошибка.

2. gcc 0.c -L/usr/lib/i386-linux-gnu
Тоже не понятна команда. Во первых в билде используется g++, а не gcc. Потом тут не указано, что нужно линковаться с libm (в проекте я тоже не вижу явного указания линковаться с libm, но возможно это приходит через ключики).

Я бы попробовал как-то так

g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
g++ -o dist/Debug/GNU-Linux-x86/cppapplication_1 build/Debug/GNU-Linux-x86/main.o

если компилируется и линкуется, то значит проблема в настройке окружения IDE.
если не компилируется, то надо смотреть дальше. например найти где лежит libm.so, и добавить эту директорию через -L:

g++ -o dist/Debug/GNU-Linux-x86/cppapplication_1 build/Debug/GNU-Linux-x86/main.o -L/path-to-libm/
 
G

Guest

#3
Я бы попробовал как-то так
Код:
g++	-c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
g++	 -o dist/Debug/GNU-Linux-x86/cppapplication_1 build/Debug/GNU-Linux-x86/main.o
если компилируется и линкуется, то значит проблема в настройке окружения IDE.
если не компилируется, то надо смотреть дальше. например найти где лежит libm.so, и добавить эту директорию через -L:
Код:
g++	 -o dist/Debug/GNU-Linux-x86/cppapplication_1 build/Debug/GNU-Linux-x86/main.o -L/path-to-libm/
Во-первых, спасибо за ответ)
Первая команда нормально выполняется. Вторая выдает все ту же ошибку.
В таком виде одна библиотека цепляется нормально, не находит libc, лежащий в /lib/i386-linux-gnu/
Код:
g++ -o dist/Debug/GNU-Linux-x86/cppapplication_1 build/Debug/GNU-Linux-x86/main.o -L/usr/lib/i386-linux-gnu//usr/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status
Так
Код:
g++ -o dist/Debug/GNU-Linux-x86/cppapplication_1 build/Debug/GNU-Linux-x86/main.o -L/usr/lib/i386-linux-gnu/ -L/lib/i386-linux-gnu/
то же самое
 

lazybiz

Well-known member
03.11.2010
1 339
0
#4
АндRei, libm.so - это динамическая библиотека, это как DLL в ОС Windows. Убедись в том что у тебя есть libm.a.
 
G

Guest

#5
Да, что это библиотека, уже представляю. Что касается libm.a - есть два файла, usr/lib/libm.a и usr/lib/xen/libm.a