2014-11-05 117 views
2

我想使用gcc和makefile编译一些C包装函数到Python 3.4,但我找不到正确的编译和链接标志。我使用Ubuntu的14如何使用gcc编译和链接python3包装函数

现在这是我试图在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 '[email protected]@GLIBC_2.2.5' 
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line 

另外,我在makefile中一点经验,所以我不这样做,如果我沿着这条路做了什么错误

+0

@MichaelPetch是的,得到了​​同样的错误 – Jorgel 2014-11-05 03:33:34

+0

建立对静态库不会让你开心。 – 2014-11-05 05:21:40

回答

1

你应该在Makefiles上找到一个很好的教程,但是这个应该让你开始:

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 [email protected] 

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

+0

工作过,谢谢 – Jorgel 2014-11-05 20:30:28

相关问题