2014-11-05 99 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

相關問題