【问题标题】:How to compile and link python3 wrapper functions using gcc如何使用 gcc 编译和链接 python3 包装函数
【发布时间】:2014-11-05 03:11:15
【问题描述】:

我正在尝试使用 gcc 和 makefile 将一些 C 包装函数编译到 Python 3.4,但我没有成功找到正确的编译和链接标志。我正在使用 Ubuntu 14

现在这是我在 makefile 中尝试的:

CC      = gcc
CFLAGS  = -Wall -std=c99 `pkg-config --cflags python3` 
LDFLAGS = `pkg-config --libs python3` 

final: functions.o wrapper.o
$(CC) -o functions.o $(CFLAGS) $(LDFLAGS)

functions.o: functions.c functions.h
$(CC) $(CFLAGS) -c functions.c

wrapper.o: wrapper.c
$(CC) $(CFLAGS) -g -c wrapper.c

使用这个得到我这个错误:

/usr/bin/ld: /usr/local/lib/libpython3.4m.a(dynload_shlib.o): undefined reference to symbol 'dlsym@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line

另外,我在 makefile 方面的经验很少,所以如果我在此过程中做错了什么,我不会这样做

【问题讨论】:

  • @MichaelPetch 是的,得到了​​同样的错误
  • 针对静态库构建不会让您满意。

标签: python c gcc makefile


【解决方案1】:

您可能应该找到一个关于 Makefile 的很好的教程,但是这个应该可以帮助您入门:

CC      = gcc
CFLAGS  = -Wall -std=c99 `pkg-config --cflags python-3.4`
CFLAGS  += -fPIC
LDFLAGS = `pkg-config --libs python-3.4`

all: myfunctions.so

myfunctions.so: wrapper.o functions.o
    $(CC) -shared $(LDFLAGS) $^ -o $@

如果您要为 Python 创建 C 包装器,则需要创建一个共享对象。为此,您至少必须在编译时使用-fPIC,在链接时使用-shared。上面的示例 Makefile 使用内置规则将 .c 文件编译为 .o 文件。此示例中的共享对象将创建为myfunctions.so,但您可以将myfunctions.so: 更改为您喜欢的任何名称。这个Makefile可以用make all调用来生成共享对象。

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多