Линкер не найдет -lglut - PullRequest
       4

Линкер не найдет -lglut

2 голосов
/ 28 декабря 2011

SO.

Я немного новичок в мире разработчиков Linux (без ide), поэтому, пожалуйста, наберитесь терпения.

Выпуск

У меня есть созданный файл make, который компилирует около 7-8 файлов в .o файлы, которые затем связываются вместе с несколькими библиотеками. Я сделал локаторы в этих библиотеках, и их аналоги dev do существуют. Проблема в том, что компоновщик их не находит. Мой вывод (если я правильно читаю) говорит мне, что он смотрит не в ту область. Я экспортировал LD_PATH, чтобы включить /usr/lib, где мои .so. файлы. Мой главный вопрос: как мне заставить -lglew и -lglut связываться друг с другом? Я также хотел бы поместить мои файлы .o в мою папку obj, а мои двоичные файлы - в папку bin. Это возможно в make-файле? Если да, то, учитывая мой файл make, какой рецепт будет лучшим для этого?

Makefile

  1 BIN = bin/
  2 OBJ = obj/
  3 TARGET = opengl_03
  4 DEPS = main.o  displayinit.o initializer.o algorithms.o matrix3f.o window.o vertex3.o
  5 CC = g++
  6 CFLAGS = -g -m32
  7 LIBS = -lglut -lGLEW
  8 INCLUDEPATH = -L/usr/include/ -L/usr/lib
  9 
 10 $(TARGET) : $(DEPS)
 11     $(CC) $(LIBS) $(INCLUDEPATH) $(CFLAGS) -o $(TARGET)  $(DEPS) $(BIN)
 12 
 13 displayinit.o : displayinit.cpp displayinit.h
 14     $(CC) -c displayinit.cpp $(OBJ)
 15 initializer.o : initializer.cpp initializer.h
 16     $(CC) -c initializer.cpp $(OBJ)
 17 algorithms.o : algorithms.cpp algorithms.h
 18     $(CC) -c algorithms.cpp $(OBJ)
 19 matrix3f.o : matrix3f.cpp matrix3f.h
 20     $(CC) -c matrix3f.cpp $(OBJ)
 21 vertex3.o : vertex3.cpp vertex3.h
 22     $(CC) -c vertex3.cpp $(OBJ)
 23 window.o : window.cpp window.h
 24     $(CC) -c window.cpp $(OBJ)
 25 main.o : main.cpp
 26     $(CC) -c main.cpp $(OBJ)
 27 
 28 clean:
 29     rm $(DEPS) 
 30 
 31 

выход

g++ -lglut -lGLEW  -L/usr/include/ -L/usr/lib -g -m32  -o opengl_03  main.o  displayinit.o initializer.o algorithms.o matrix3f.o window.o vertex3.o bin/
/usr/bin/ld: skipping incompatible /usr/lib/libglut.so when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/libglut.a when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libglut.so when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libglut.a when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/libglut.so when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/libglut.a when searching for -lglut
/usr/bin/ld: cannot find -lglut
/usr/bin/ld: cannot find -lGLEW
/usr/bin/ld: cannot find bin/: File format not recognized
collect2: ld returned 1 exit status
make: *** [opengl_03] Error 1

Я ценю помощь.

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Какой Linux вы используете?Похоже, вы используете 64-битную систему, но пытаетесь скомпилировать 32-битное приложение (из-за параметра -m32-компилятора).Поэтому либо удалите -m32, либо установите 32-битные библиотеки разработки.Их можно назвать как freeglut-32bit или как-то так.

2 голосов
/ 28 декабря 2011

/ usr / bin / ld: пропуск несовместимого /usr/lib/libglut.so при поиске -lglut

Это означает, что ld найден libglut.so, но не подходит для цели -m32.

PS, BIN - это каталог, почему вы помещаете его в объект компиляции?

$(CC) $(LIBS) $(INCLUDEPATH) $(CFLAGS) -o $(TARGET)  $(DEPS) $(BIN)
...