Как связать зависимости при компиляции extern «C» {…}?

0

Я использую ctypes Python для взаимодействия с некоторым C++ и добавил зависимость, с которой я не могу ссылаться во время компиляции. (Эта зависимость отлично связывается для любых применений, отличных от этого extern "C" {...} кода extern "C" {...}.)

Я включил свой C++ в файл _extern.cpp ниже:

// cellComplex_extern.cpp

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

extern "C" {...}

Файл заголовка cell.hpp включает в себя мою зависимость, и здесь начинается проблема. Компилятор (конечно) не может найти "interval.hpp или hess_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.

Какие-нибудь советы?

EDIT: Хорошо, ответ ниже, и вот мой новый make файл, который отлично работает:

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
Теги:
compiler-construction

1 ответ

1
Лучший ответ

Я не уверен, что правильно понимаю вашу проблему, но вы не можете указать путь include к компилятору, как в

g++ -I$(CXSCINCDIR) -c -fPIC cellComplex_extern.cpp -o cellComplex_extern.o  

?

  • 0
    святая корова - да. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню