2013-12-26 4 views
3

Я пытаюсь скомпилировать исполняемый файл, который также хочу использовать в качестве общей библиотеки. Когда я четко компилирую и свяжу его как «исполняемый» - все мелкие файлы могут запускаться и работать корректно. На этой фазе я не могу правильно связать с ней другие библиотеки (тонны переопределений в журнале). Когда я пытаюсь добавить опции -Fpic -shared - программа успешно копирует, но начинается с ошибки сегментации. Как я могу сделать его исполняемым и «sharedlibrary» одновременно?Исполняемый файл Linux как общая библиотека

+0

Можете ли вы показать ошибки? Я скомпилировал библиотеки и исполняемые файлы под linux с включенной «shared library» и не имел проблем, которые вы описываете. Так что можно. – nrathaus

+1

Один файл не может быть исполняемым и разделяемой библиотекой. –

+1

Почему вы хотите это сделать? Единственный пример - '/ lib/libc.so.6' ... –

ответ

4

Один файл не может быть совместно используемой библиотекой и исполняемым файлом одновременно. Но вы можете связать свои объектные файлы дважды, чтобы сделать оба. Он пошел бы что-то вроде этого:

g++ -c -o module.o module.cpp # create an object that has no main() 
g++ -shared -fPIC -o libmodule.so module.o # build shared library 
g++ -o program module.o main.cpp # build executable 

Или вместо этого, последняя строка может связать общую библиотеку (в этом случае вам понадобится библиотека присутствующая при запуске исполняемого файла):

g++ -o program -l module main.cpp 
+3

Это неверно: на многих системах 'libc.so.6' является одновременно общей библиотекой и исполняемой программой. –

+2

Технически правильно - лучший вид правильного! Но в любом случае 99,99% исполняемых файлов не являются общими объектами и наоборот. Скажем, вы «можете», но и вы «вероятно, не будете». Я также попытался выполнить мой libc на Mac OS X, и он не может. –

+5

Этот ответ неверный (по крайней мере, на linux): см. Http://stackoverflow.com/a/1451482/50617 –

Смежные вопросы