2013-12-18 4 views
3

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

Я передаю флаг -c в gcc для генерации .o, который ar затем использует для создания библиотеки. Какую комбинацию магического флага нужно передать, чтобы мой статический lib swallow libxml2?

+1

[ли это связано вопрос] (http://stackoverflow.com/q/13128/2065121) помощь на всех? –

+0

@ RogerRowland -. Можете ли вы дать ему ответ, чтобы я мог принять его? – ruipacheco

+1

Ну, это уже ответ от кого-то другого - просто переместите его в связанном вопросе, все, что я сделал, это поиск. –

ответ

4

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

  1. связь с обеими библиотеками в конечной цели с указанием новой библиотеки .
  2. скопируйте библиотеку libxml2 и просто используйте инструмент lib , чтобы добавить к нему свои объекты.
1

К сожалению, то, что было наиболее эффективным для меня, чтобы извлечь все .o с от статической библиотеки, а затем включить их с .o с, чтобы сделать один .a

Таким образом, вы можете посмотреть на содержимое libxml2.a с ar t libxml2.a
Допустим для простоты, что она содержится только: xml2a.o и xml2b.o
Вы хотите объединить тех, с вашим mine.o сделать mine.a

Вам нужно сначала сделать ar x libxml2.a выйти xml2a.o и xml2b.o
Затем сделайте ar cr mine.a mine.o xml2a.o xml2b.o

A simple explanation из наиболее широко используемых ar команд, хотя я, вероятно, кратко, что вы получите от него здесь.

+0

Достижение того же вывода здесь. – ruipacheco

+0

@Cocoaster, если вы придумали что-то лучшее, дайте мне знать. Потому что это решение работает, но человек уродлив, особенно в моем случае, когда мне нужно связать 5 '.a's –

+0

Не работает для меня: http://stackoverflow.com/questions/20662999/static-lib- ranlib-cant-find-symbols – ruipacheco

0

вручную объединить объекты в новый статический экземпляр библиотеки:

ar -x libx.a 
ar -x liby.a 
ar -c libz.a *.o 
Смежные вопросы