LINUX.ORG.RU

Глупый вопрос о подключении библиотек g++

 


0

2

Доброго времени суток!

подскажите, как сказать g++, чтобы он подключал статическую версию библиотеки вместо динамической при линковке?

Также интересует, как можно сказать программе не использовать libstdc++ и libgcc_s (ну или статически их подключить).

★★

Если с libgcc_s прокатывает -static-libgcc, то libstdc++ статик-версий не имеет (ну или лежат они не в /usr/lib/x86_64-linux-gnu), но как-то все же хочется отвязать программу от библиотек компилятора.

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

вдруг в отдельном пакете идет каком-нибудь?

у меня в гентощке лежит таки :)

/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/libstdc++.a
Harald ★★★★★
()

Также интересует, как можно сказать программе не использовать libstdc++ и libgcc_s (ну или статически их подключить).

-nostdlib

ps: пытаешься собирать кросс-дистровый бинарь, или что-то другое?

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от Harald

хм... у меня тоже нашлось, но теперь libconfig++ тянет за собой шаред-версии libstdc++, libgcc_s. Как теперь статик-версию этой библиотеки подключить? опцию -static-libconfig++ компилер не знает.

aido ★★
() автор топика
Ответ на: комментарий от waker

ps: пытаешься собирать кросс-дистровый бинарь, или что-то другое?

да.

aido ★★
() автор топика
Ответ на: комментарий от waker

на -nostdlib ругается:

/usr/bin/ld: src/web_server.o: неопределённая ссылка на символ «socket@@GLIBC_2.2.5»
/lib/x86_64-linux-gnu/libc.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

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

-nostdlib -lc -lm и т.п.

только это не поможет. в других дистрах libc старее может быть, чем у тебя на локалхосте. в отличие от венды и мака, чтобы получить подобное под линухом, придется собирать программу в чруте или виртуалке с дремучей версией GCC и всех остальных библиотек. а все что касается C++ — либо вообще отключать, либо тащить с собой, либо линковать статиком (но тоже обязательно дремучую версию). а это, в свою очередь, влечет за собой дремучую версию gcc, потому что libstdc++ к нему болтами прибит.

есть и другой способ, он посложнее, но позволяет компилять на любом дистрибутиве, любой версией gcc, без виртуалок и чрутов. если интересно, давай лучше спишемся вне лора, тут этот способ исторически вызывает бугурт у некоторых личностей.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от aido

по-моему, -static влияет только на библиотеки, указанные в командой строке после этого ключа, хотя не уверен, перечитай ман

в крайнем случае можно закинуть все библиотеки в нужном виде в одну директорию и натравить линкер на неё

Harald ★★★★★
()
Ответ на: комментарий от Solace
g++ -L/usr/lib/gcc/x86_64-linux-gnu/4.9 -O2 -Wall -pedantic -march=native -static-libgcc -static-libstdc++ -std=c++11 src/usb_daemon.o src/web_usb_comm.o src/usb_handler.o src/web_server.o src/daemon.o src/main.o src/CFunctions/cfunctions.o -lusb-1.0 -lpthread -lconfig++
aido ★★
() автор топика
Ответ на: комментарий от aido

вместо -lconfig++ тупо указываешь путь к libconfig++.a (или как там её у тебя зовут) по аналогии с src/usb_daemon.o src/web_usb_comm.o src/usb_handler.o src/web_server.o src/daemon.o src/main.o src/CFunctions/cfunctions.o и прочими .o. При этом местоположение этой опции в командной строке имеет значение.

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

При этом местоположение этой опции в командной строке имеет значение.

А почему GNU'тый линковщик не может построить простейшее дерево зависимостей и зависит от такой прихоти, как порядок линкуемых библиотек?

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

А почему GNU'тый линковщик <...> зависит от такой прихоти, как порядок линкуемых библиотек?

Потому что один символ может быть определен в разных библиотеках.

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

то что написал i-rinat..

но лучше использовать готовый wrapper. я использую apgcc, доведенный до моих нужд. он рипнулся, но у тех кто успел скачать - работает.

и на лоре вот недавно советовали это: https://davidgow.net/hacks/bingcc.html

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

4.9.2 собирается минут 30 со всеми зависимостями (ажно с тремя), если собирать только кресты и сишечку, записать всё в скрипт и уйти потупить.

На виртуалке 4рех головой, с 8гб памяти и диском хрен пойми где.

Ещё, оно полюбасу есть в ppa.

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

А LLVM такое умеет? если да, то есть где-нибудь краткие маны? неохота тонны документации по Clang++ читать.

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

А LLVM такое умеет? если да, то есть где-нибудь краткие маны? неохота тонны документации по Clang++ читать.

не знаю. я его только на маке использую, а там версионные SDK искоробочно, и все эти извраты не нужны.

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