У меня были некоторые проблемы с подключением статической библиотеки stxxl к общей библиотеке, как указано в моем вопросе Связывание статической библиотеки с Boost Python (общая библиотека) - ошибка импорта
Команда Iиспользовался был
g++ -Wall -pthread -march=i686 -I/home/zenna/Downloads/stxxl-1.3.0/include -include stxxl/bits/defines.h -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I /home/zenna/local/include/ -I /usr/include/python2.6/ -fPIC -c partition.cpp -o obj/Partition_wrap.o
и для связи:
g++ -shared -lboost_python -L/home/zenna/local/lib/ -L/home/zenna/Downloads/stxxl-1.3.0/lib/bk/ -Wall -pthread -L/home/zenna/Downloads/stxxl-1.3.0/lib -lstxxl -o lib/fast_parts.so obj/Partition_wrap.o
Используя nm я обнаружил, что отсутствующие символы были в окончательной выходной библиотеке общих объектов, но имели тип "U" для неопределенного.
Затем я изменил команду компоновки, чтобы не только использовать -lstxxl, но также добавил весь архивный файл в качестве другого ввода в компоновщик
, чтобы новая команда была (разница в конце)
++ -shared -lboost_python -L / home / zenna / local / lib / -L / home / zenna / Downloads / stxxl-1.3.0 / lib / bk / -Wall -pthread -L / home / zenna/Downloads/stxxl-1.3.0/lib -lstxxl -o lib / fast_parts.so obj / Partition_wrap.o obj / libstxxl.a
Это устранило проблему, насколько я могу судить.
Тогда у меня вопрос В чем разница между использованием флага -l и добавлением архива каквход и почему прежний метод привел к неопределенным символам?