Go生成的共享对象(库)有什么问题?

时间:2018-01-24 15:06:59

标签: python c gcc cython

上下文

我正在尝试为最初使用Go编写的程序构建Python 3的绑定。以下是我迄今为止所做的事情:

  1. Write Go代码,用于向C代码公开功能。
  2. 编写使用Go代码公开的函数的胶水C代码。
  3. 编写调用C代码的Cython代码,调用Go代码。
  4. 我可以通过手工制作GCC命令来编译我的代码。
  5. 问题

    setuptools想要生成命令的方式,ld无法“找到”库。没有任何提示没有帮助,ld不会产生任何可解析的输出。

    setuptools生成的命令如下所示:

    gcc -pthread -shared build/temp.linux-x86_64-3.6/pykubectl/lib/bindings.o \
        build/temp.linux-x86_64-3.6/pykubectl/wrapped.o \
        -lpykubectl.so \
        -o build/lib.linux-x86_64-3.6/pykubectl/wrapped.cpython-36m-x86_64-linux-gnu.so \
        -L/home/.../pykubectl/pykubectl/lib
    

    这失败了:/usr/bin/ld: cannot find -lpykubectl.so

    但是,如果我这样做:

    gcc -pthread -shared build/temp.linux-x86_64-3.6/pykubectl/lib/bindings.o \
        build/temp.linux-x86_64-3.6/pykubectl/wrapped.o \
        /home/.../pykubectl/pykubectl/lib/libpykubectl.so \
        -o build/lib.linux-x86_64-3.6/pykubectl/wrapped.cpython-36m-x86_64-linux-gnu.so
    

    它确实编译。

    以下是有关libpykubectl.so的一些信息:

    ldd /home/.../pykubectl/pykubectl/lib/libpykubectl.so
        linux-vdso.so.1 =>  (0x00007ffd7cccd000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f69662d2000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6965f0b000)
        /lib64/ld-linux-x86-64.so.2 (0x000055e410408000)
    
    
    file /home/.../pykubectl/pykubectl/lib/libpykubectl.so 
        /home/.../pykubectl/pykubectl/lib/libpykubectl.so: \
        ELF 64-bit LSB shared object,
        x86-64, version 1 (SYSV),
        dynamically linked,
        BuildID[sha1]=d4225259207743ceaecda8d90368c13732d0f310,
        not stripped
    

    (为便于阅读而格式化)。

0 个答案:

没有答案