Это вероятно из необходимости. До недавнего времени BSD-лицензированные компиляторы C были, вероятно, немногими или не близко подошли к четности функции с gcc
.
Тот код в нашем исходном дереве, которое подпадает под Генеральную общедоступную лицензию GNU (GPL) или Стандартную общественную лицензию библиотеки (LGPL), идет с немного большим количеством присоединенных строк, хотя, по крайней мере, на стороне вынужденного доступа, а не обычного противоположного. Из-за дополнительных сложностей, которые могут развиться в коммерческом использовании программного обеспечения GPL, мы действительно, однако, предпочитаем программное обеспечение, отправленное под более расслабленным авторским правом BSD, когда это - разумная опция сделать так.
Можно получить информацию из файла ELF (исполняемый файл или библиотека) с readelf
.
Похож Вы ищете экспортируемые символы, так использование:
$ readelf --dyn-syms libyourthing.so
Для функций C-типа Вы только получите имена функций, не типы аргумента или возвращаемые значения. Для функций C++ Вы доберетесь, скорректированные имена - передают вывод по каналу той команды через c++filt
получить имена функций и типы аргумента (все еще никакие возвращаемые значения хотя).
(Globals также отображены в выводе с их именами и размером, но не их типом.)
Другие полезные инструменты nm
и objdump
которые предоставляют подобную информацию.
Я не уверен, что это поможет Вам все же. Необходимо также попробовать strace
видеть, смотрит ли Python, где Вы думаете, что это. Что-то как:
$ strace -e trace=open python your_code_that_loads_your_lib.py
покажет Вам весь open
вызовы, выполняемые Python - ищут Ваше название библиотеки там (будет много зарегистрировано вышеупомянутым, отфильтрует его). Каждый вызов также показывает код возврата, таким образом, Вы могли бы получить лучшее представление о том, что продолжается.
О, и удостоверьтесь, что Вы не пытаетесь загрузить библиотеку на 32 бита во время выполнения Python на 64 бита, или наоборот.
strace
. – Stephane Rolland 20.01.2013, 23:14