我想要使用CFFI在Python中访问一些C库。构建库后,我得到了2个文件:Sub getdatafromaccesstoanarray()
Dim cn As Object 'Connection
Dim rs As Object 'Recordset
Dim vAry() As Variant 'Variant Array
Dim dbPath As String 'Database Path
Dim dbName As String 'Database Name
Dim txt As String
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
dbPath = ThisWorkbook.Path & "\"
dbName = "NewDB.accdb"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & dbPath & dbName & ";"
rs.Open "SELECT * FROM BILLDETAILS WHERE BILLDETAILS.SN_AUTO =100;", cn
vAry = rs.GetRows()
'now when the data is copied to my array how can i paste specific values from this data to
'cells in my excel sheet
'like
'on active sheet
'[a1] = vAry(value1)
'[a2] = vAry(value3)
'[a3] = vAry(value8)
'and other values like wise
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
和$HOME/libcint/include/cint.h
。
现在我尝试了CFFI API模式:
$HOME/libcint/lib/libcint.so
但它无法找到from cffi import FFI
libcint_dir = os.path.expanduser('~/libcint')
ffibuilder = FFI()
ffibuilder.set_source('_libcint',
r'#include <include/cint.h>',
include_dirs = [libcint_dir],
libraries = ['libcint'],
library_dirs = [os.path.join(libcint_dir, 'lib')],
)
文件:
libcint.so
/usr/bin/ld: cannot find -llibcint
中的路径是正确的,因为我没有收到有关未找到头文件的任何错误消息。此外,我设法使用libcint_dir
模块成功连接库,因此ctypes
本身应该没问题。
我在这里做错了什么?
如果我说得对,那么这里需要3个步骤。 (请纠正我,如果我在这里感到困惑。)
libcint.so
我的问题在于第二步。
答案 0 :(得分:3)
您说libraries = ['libcint']
,这意味着编译器将查找名为liblibcint.so
的文件。你应该写的是libraries = ['cint']
。
答案 1 :(得分:0)
您可能会被库的编译时间与运行时位置问题所困扰。您提供给库的路径仅在GCC编译时使用。在运行时,它会查找具有正确名称的库,但仅使用系统配置的默认路径。所以你需要告诉系统在哪里找到那个库。您可以执行以下操作之一:
将库移至标准位置,例如/usr/local/lib
;
使用环境变量LD_LIBRARY_PATH=/path/to/library
;
如果要对已编译模块内的路径进行硬编码,可以在调用set_source()时使用extra_link_args=['-Wl,-rpath=' + path]
。
这都是假设Linux。在另一个平台上,所有三个选项都可能也可用,但细节不同......