Ошибка с двумя способами связывания регулярного выражения - PullRequest
1 голос
/ 06 марта 2009

Я понимаю, что статическая библиотека boost regex создается с помощью утилиты ar путем архивирования отдельных объектных файлов.

Я связал библиотеку boost regex с помощью опции -l в gcc. Это сработало очень хорошо.

g++ *.o libboost_regex-gcc-1_37.a -o sairay.out

Я отдельно скомпилировал исходные файлы boost regex, а затем попытался связать объектные файлы моего приложения и объектные файлы boost regex в один исполняемый файл. Но сейчас я получаю ошибки.

  g++ *.o -o sairay.out
  Undefined                       first referenced
  symbol                             in file
  main                                /opt/csw/gcc3/lib/gcc/sparc-sun-solaris2.8/3.4.5/crt1.o

Я хотел бы знать, в чем разница между связыванием статической библиотеки и связыванием отдельных объектов файлов статической библиотеки с приложением?

Ответы [ 2 ]

2 голосов
/ 06 марта 2009

Я думаю, это должно быть:

g++ *.o -L. -lboost_regex-gcc -o sairay.out -static
0 голосов
/ 06 марта 2009

Вы, очевидно, забыли включить объектный файл вашего приложения, который определяет функцию main. Может быть, вы набрали g++ myapp.cpp вместо g++ -c myapp.cpp (чтобы фактически создать объектный файл вместо уже готового связанного двоичного файла)?

Статическая библиотека на самом деле не намного больше, чем просто архив многих или нескольких объектных файлов (заархивированных утилитой ar) с индексом таблицы символов для быстрого поиска. Так что, если вы включите объектные файлы вручную в ссылку, я думаю, что это по сути то же самое.

Попробуйте следующее для просмотра объектных файлов, которые он содержит

ar tv libboost_regex-gcc-1_37.a
...