如何在编译extern“C”{...}时链接依赖项?

时间:2014-02-03 18:31:41

标签: c++ compiler-construction

我正在使用Python的ctypes与一些C++代码进行交互,并添加了一个在编译时似乎无法链接的依赖项。 (此依赖关系适用于除此extern "C" {...}代码之外的任何用途。)

我将C++添加到以下_extern.cpp文件中:

// cellComplex_extern.cpp

#include "../../../cell.hpp"

extern "C" {...}

头文件cell.hpp包含我的依赖项,这是问题开始的地方。 编译器(当然)找不到"interval.hpphess_ari.hpp ,因为在下面的Makefile中我没有建立链接...

//cell.hpp
#include "interval.hpp"  
#include "hess_ari.hpp"

你可以看到:

# Makefile
export CXSCINCDIR = ${HOME}/local/cxsc/include                                        
export CXSCLIBDIR = ${HOME}/local/cxsc/lib                                            

CXXINC   = -I$(CXSCINCDIR)   
LIBPATHS = -L$(CXSCLIBDIR)                                          
CXXFLAGS =   $(CXXINC)       

cellComplex_extern:

  g++  -c -fPIC cellComplex_extern.cpp -o cellComplex_extern.o                       
  g++  -shared -Wl -o cellComplex_lib.so cellComplex_extern.o                        

为什么我没有建立链接?因为我知道怎样做的唯一方法就是

g++ -I$(CXSCINCDIR) cellComplex_extern.cpp -o cellComplex_extern.o -L$(CXSCLIBPATHS) -lcxsc

由于我在main中没有cellComplex_extern.cpp功能,因此无效。

任何提示?

编辑:好的,答案如下,这是我的新makefile,效果很好:

export CXSCINCDIR = ${HOME}/local/cxsc/include                                        
export CXSCLIBDIR = ${HOME}/local/cxsc/lib                                            
export CXX = g++                                                                      

CXXINC   = -I$(CXSCINCDIR)    #-I$(GSLINCDIR)
LIBPATHS = -L$(CXSCLIBDIR)    #-L$(GSLLIBDIR)                                         
CXXFLAGS =   $(CXXINC)        #$(CXXOPTS)

cellComplex_extern:

  g++  $(CXXINC) -c -fPIC cellComplex_extern.cpp -o cellComplex_extern.o             
  g++  $(CXXFLAGS) -shared -Wl -o cellComplex_lib.so cellComplex_extern.o $(LIBPATHS) -lcxsc

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了您的问题,但是您无法在

中提供编译器的包含路径
g++ -I$(CXSCINCDIR) -c -fPIC cellComplex_extern.cpp -o cellComplex_extern.o