2016-08-31 11 views
0

Я хочу использовать некоторые функции из общей библиотеки в python. Из документа python я знаю, что ctypes - хороший выбор. Однако такая библиотека имеет некоторые неопределенные символы, и я должен связать ее с другой разделяемой библиотекой, чтобы получить символы.python ctypes связывает несколько разделяемых библиотек с примером gsl gslcblas

В g ++ это просто: g ++ main.cpp -la -lb. Мне нужна функция в liba.so, а у liba.so есть некоторая неопределенная функция, которая может быть решена в libb.so.

Но как это сделать в ctypes? ctypes.cdll.LoadLibrary ('liba.so') говорит, что есть некоторые неопределенные символы, как сказать ctypes для поиска libb.so? Поскольку ldd liba.so не показывает ссылку на libb.so.

Пример: Я хочу использовать некоторые функции в gsl. В г ++:

g++ main.cpp -lgsl -lgslcblas 

и LDD libgsl.so не показывает ссылку на libgslcblas

В питона:

ctypes.cdll.LoadLibrary('libgsl.so') 

как сказать ctypes найти libgslcblas?

Та же проблема также случается если я использую scalapack. Я использую Ubuntu 16,04

ответ

1

Это old answer говорит применять mode=ctypes.RTLD_GLOBAL, то есть в этом случае

import ctypes 

dll1 = ctypes.CDLL('libgslcblas.so', mode=ctypes.RTLD_GLOBAL) 
dll2 = ctypes.CDLL('libgsl.so')