如何配置环境以使用LLVM Clang构建python嵌入式c代码



我正试图编译一个用c编写的程序,该程序中嵌入了python

我运行python3.3-config -cflags来获取我在该命令中使用的cflags。

% >> clang -v einformer.c -o einformer - I/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -I/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -Wno-unused-result -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/include -I/usr/local/opt/sqlite/include
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix
"/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.8.0 -emit-obj -disable-free -disable-llvm-verifier -main-file-name einformer.c -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 136 -v -g -resource-dir /usr/bin/../lib/clang/4.2 -D NDEBUG -I /usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -I /usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -I /usr/local/include -I /usr/local/opt/sqlite/include -fmodule-cache-path /var/folders/lz/5nhsdlnn3x9g8ry_mkgtgh500000gp/T/clang-module-cache -c-isystem /usr/include/python2.6 -c-isystem . -O3 -Wno-unused-result -Wall -Wstrict-prototypes -fdebug-compilation-dir /Users/ardentapprentice/dev/osx/test -ferror-limit 19 -fmessage-length 140 -fwrapv -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.8.0 -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fno-common -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/lz/5nhsdlnn3x9g8ry_mkgtgh500000gp/T/einformer-T6nymD.o -x c einformer.c
clang -cc1 version 4.2 based upon LLVM 3.2svn default target x86_64-apple-darwin12.2.0
ignoring duplicate directory "/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m"
ignoring duplicate directory "/usr/local/include"
  as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m
 /usr/local/opt/sqlite/include
 /usr/include/python2.6
 .
 /usr/local/include
 /usr/bin/../lib/clang/4.2/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
einformer.c:92:25: warning: implicit declaration of function 'PyString_AsString' is invalid in C99 [-Wimplicit-function-declaration]
    path_array[i] = PyString_AsString(pypath);
                    ^
1 warning generated.
 "/usr/bin/ld" -demangle -dynamic -arch x86_64 -dynamic -macosx_version_min 10.8.0 -o einformer /var/folders/lz/5nhsdlnn3x9g8ry_mkgtgh500000gp/T/einformer-T6nymD.o -lSystem /usr/bin/../lib/clang/4.2/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
  "_PyList_GetItem", referenced from:
      _main in einformer-T6nymD.o
  "_PyList_Size", referenced from:
      _main in einformer-T6nymD.o
  "_PyRun_SimpleStringFlags", referenced from:
      _main in einformer-T6nymD.o
  "_PyString_AsString", referenced from:
      _main in einformer-T6nymD.o
  "_Py_Finalize", referenced from:
      _main in einformer-T6nymD.o
  "_Py_Initialize", referenced from:
      _main in einformer-T6nymD.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

似乎clang在定位标题时遇到了问题?<Python.h>包含在源中我不确定我做错了什么:/

我花了大约3个小时浏览python文档http://docs.python.org/3.3/c-api/index.html并在谷歌上搜索,但我似乎找不到任何有助于我的信息。

python3.3-config --cflags只提供查找标头所需的参数。python3.3-config --ldflags将为您提供链接器标志。这意味着您应该能够使用编译器调用来编译程序,比如:

clang -v einformer.c -o einformer $(python3.3-config --cflags) $(python3.3-config --ldflags)

最新更新