LINUX.ORG.RU

Makefile


0

0

У меня такая проблема: у меня объектные *.o файлы от проги(1). Надо скомпилировать динамическую библиотеку, использующую часть функций проги(1). для этого пишу такой Makefile:

../w_ready/lib_133.so: affect_133.cpp
$(CXX) $(CXXFLAGS) -shared -o ../w_ready/lib_133.so lib_133.cpp main.o ansistring.o world.o worldsocket.o wowcrypt.o wowemudb.o usersocket.o units.o spawnpoints.o sha1.o players.o objects.o map.o logincrypt.o items.o bytebuffer.o bignumber.o ai.o spell.o spellhandle.o script.o

И у меня lib_133.so получается больше чем сама прога! Как мне сделать так чтоб в файл компановались только используемые функции? или это невозможно? Или что для этого надо делать?

> Как мне сделать так чтоб в файл компановались только используемые функции?

Используемые кем? Это же .so

c0ff
()
Ответ на: комментарий от anonymous

>пожалуйста дай комментарий новичкам!!!

man strip

dn2010 ★★★★★
()

Strip не решит всех проблем.

Библиотека больше проги, т.к. содержит все объектные модули проги, плюс lib_133.cpp. Еще надо бы посмотреть на CXXFLAGS, может там чего спряталось...

Для решения задачи предлагаю сложить "объектные *.o файлы от проги" в статическую библиотеку libdummy.a и использовать её при сборке динамической библиотеки. Таким образом, в динамическую библиотеку попадут только необходимые объектные модули.

$(CXX) $(CXXFLAGS) -shared -o ../w_ready/lib_133.so lib_133.cpp -ldummy

Кстати, main.o в списке объектных модулей, очевидно, приведет к появлению функции main в динамической библиотеке. Что, в свою очередь, может привести к проблемам при использовании библиотеки.

И еще кстати, объектные файлы для проги, очевидно, содержат position-dependent код (т.е. получены без -fPIC). Кроме того, что это просто не соответствует LSB, такая библиотека не будет работать на x86_64.

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