My CMake thiết để tạo ra một lib chia sẻ trong linux là một cái gì đó giống nhưctypes không tìm thấy biểu tượng trong thư viện chia sẻ tạo bằng CMake
SET (CMAKE_CXX_FLAGS "-fPIC")
SET (LIB_UTILS_SRC
Utils.cpp
)
ADD_LIBRARY (UTILS SHARED
${LIB_UTILS_SRC}
)
Nguồn Utils.cpp
double addTwoNumber(double x, double y)
{
return x + y;
}
Khi cố gắng truy cập 'addTwoNumber 'chức năng sử dụng CTypes như
import os
import ctypes as c
libPath = '/home/AP/workspace/LearningCPP/lib/libUTILS.so'
libUTILS = c.cdll.LoadLibrary(libPath)
prototype = c.CFUNCTYPE(
c.c_double,
c.c_double,
c.c_double
)
addTwoNumber = prototype(('addTwoNumber', libUTILS))
res = addTwoNumber(c.c_double(2.3), c.c_double(3.5))
Tôi nhận được một số thông báo như thế nào.
AttributeError: /home/AP/workspace/LearningCPP/lib/libUTILS.so:
undefined symbol: addTwoNumber
Tôi đã kiểm tra libUTILS.so bằng cách sử dụng lệnh "nm --demangle libUTILS.so" và hiển thị rõ ràng biểu tượng 'addTwoNumber' trong đó.
Tại sao tôi vẫn nhận được thông báo "biểu tượng không xác định" từ python? Tôi đoán rằng phải có một số cờ trình biên dịch được thiết lập sao cho các biểu tượng bị xáo trộn đúng cách. Bất kỳ đề nghị sẽ được đánh giá cao !
Cảm ơn vì điều này. Tôi đã phải đối mặt với cùng một vấn đề - hóa ra tôi chỉ cần 'extern 'C'' tất cả các hàm của tôi (như cũng được đề cập trong tài liệu Python trong phần [Mở rộng Python với C hoặc C++] (http: // docs. python.org/2/extending/extending.html#writing-extensions-in-c)). – Breakthrough