LINUX.ORG.RU

OpenGL и Ubuntu

 , ,


0

1

Ubuntu 14.10 i386

Возникла проблема с связыванием gl-них либ в проекте.

Объектники компилятся, все либы указываю (-lGL -lGLU -lGLUT + -fpic для будещей динамической либы).

После формирования динамической либы (и в месте с объектниками я указываю либы OpenGL), получаю выхлоп ldd:

	linux-gate.so.1 =>  (0xb77b3000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb765a000)
	libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7614000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb75f5000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7447000)
	/lib/ld-linux.so.2 (0xb77b6000)

Естественно, Mesa и freeglut установлены, все gl-ные либы на месте.

В чем может быть косяк?

Ответ на: комментарий от pon4ik

Так лучше?

Name := Project

override CC := g++

Dirs := bin/ lib/ obj/ dep/

override Libs := -lglut -lGLU -lGL

override Warn_flags := 
			
Defines := -DGNU_MAKE -DGL_GLEXT_PROTOTYPES

override Flags_Debug := -g -O0 $(Warn_flags)
override Flags_Release := -O2
override Flags := -std=c++11 -pipe $(Defines) $(Flags_Release)

Flag_Obj := -fPIC

Flag_Lib := -shared

Target_lib := lib$(Name).so
Target_lib_static := lib$(Name).a
Target_bin := test

Path := ./../$(Name)
Path_Tests := ./../Tests/

# список всех ресурсных файлов
Sources := \
	$(shell find $(Path) -name *.cpp)

Sources_Tests := \
	$(shell find $(Path_Tests) -name *.cpp)

# получаем имена объектных файлов
Objects := \
	$(addprefix obj/,$(notdir $(Sources:.cpp=.o)))
	
# получаем имена объектных файлов
Dependences := \
	$(addprefix dep/,$(notdir $(Sources:.cpp=.d)))

# Objects_Tests := \
# 	$(addprefix obj/tests,$(notdir $(Sources_Tests:.cpp=.o)))

Path_ALL := \
	$(dir $(Sources))

VPATH := $(Path_ALL)

#--------------------
all: .mkdirs .depends .compile .link
#--------------------
.mkdirs:
	@mkdir -p $(Dirs)
#--------------------
.depends: .mkdirs $(Dependences)

./dep/%.d : %.cpp
	$(CC) $(Flags) $(Libs) -MM -c $< > $@

include $(wildcard dep/*.d)
#--------------------	
.compile : .depends $(Objects)

# $(Objects): obj/%.o : %.cpp
./obj/%.o : %.cpp
	$(CC) $(Flags) $(Flag_Obj) $(Libs) -c $< -o $@

#--------------------	
.link: .link_libs .link_test

.link_libs: \
	./lib/$(Target_lib)

./lib/$(Target_lib): $(Objects)
	$(CC) $(Flag_Lib) $(Flags) $(Libs) $(Objects) -o lib/$(Target_lib)

.link_test: .compile ./bin/$(Target_bin)

./bin/$(Target_bin): .compile .link_libs
	cd bin; $(CC) $(Flags) $(Defines) ../lib/$(Target_lib) -c ../$(Sources_Tests) -o $(Target_bin)
	
#--------------------	
exec:
	@cd ./bin; ./$(Target_bin)
#--------------------
.PHONY: clean
	
clean:
	@rm -rf $(Dirs)
#--------------------
kachsheev ★★★ ()
Ответ на: комментарий от kachsheev

А хеллоуорд либа норм собирается?

У тебя gcc случайно не из сорцов собранный?

Я ничё криминального в мейкфайле не увидел(правда я не спал всю ночь нифига).

Может у тебя статические либы ближе лежат чем динамические(в LIBDIR например)?

Вообщем я бы собрал бы хеллоу ворд с теми же флагами, и, если там будет такая же шняга, попробовал бы прописать libdir к тем либам с которыми ты хочешь слинковаться...

Ещё как вариант - у тебя не используются символы из этих библиотек :)

pon4ik ★★★★★ ()

Так а в чём проблема, что библиотеки не видны в списке? А в программе точно есть вызовы из этих библиотек? Иначе линковщик их просто выбросит из зависимостей.

Dendy ★★★★★ ()
Ответ на: комментарий от pon4ik

Спасибо, проверю.

GCC из убунтовых рэп.

Прикол в том, что на дебьяне все норм.

kachsheev ★★★ ()
Ответ на: комментарий от pon4ik

Или что символов в них не хватает. Найди те либы которые линкуются, и глянь их содержимое с помощью nm.

pon4ik ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.