C++11 ld:找不到架构x86_64的符号clang:错误:链接器命令失败,退出代码为1

C++11 ld:找不到架构x86_64的符号clang:错误:链接器命令失败,退出代码为1,c++11,g++,swig,ld,C++11,G++,Swig,Ld,我正在使用Mac OS上的Sigg将C++代码转换为Python代码。我以前用过SWIG,但现在我有一些错误,我没有成功地管理。为了使用SWIG,我创建了一个文件RBergomi.I并应用了以下命令 swig-c++-python RBergomi.i g++-O2-fPIC-c-std=c++11 RBergomi_wrap.cxx-I/Users/../anaconda/include/python2.7 g++-std=c++11-共享RBergomi\u wrap.o-o RBergom

我正在使用Mac OS上的Sigg将C++代码转换为Python代码。我以前用过SWIG,但现在我有一些错误,我没有成功地管理。为了使用SWIG,我创建了一个文件RBergomi.I并应用了以下命令

swig-c++-python RBergomi.i

g++-O2-fPIC-c-std=c++11 RBergomi_wrap.cxx-I/Users/../anaconda/include/python2.7

g++-std=c++11-共享RBergomi\u wrap.o-o RBergomi.so

但是我得到了这个错误

“ld:找不到架构x86_64的符号

叮当声:错误:链接器命令失败,退出代码为1“

我试图寻找问题,似乎错误来自使用std::acculate,要使用它,我需要调用“numeric”头,然后我就遇到了问题。如果我删除了标题“numeric”,我就不会再有以前的错误,但累积是未知的。下面是我的RBergomi.cpp文件的代码

#include "rBergomi.h"

double updatePayoff_cholesky(Vector& Wtilde, const Vector& W1,
    Vector& v, double eta, double H, double rho, double xi,
    double T, double K, int N){
double dt = T / N;
double sdt = sqrt(dt);
scaleVector(Wtilde, pow(T, H)); // scale Wtilde for time T
compute_V(v, Wtilde, H, eta, xi, dt); // compute instantaneous variance v
double Ivdt = intVdt(v, dt);
double IsvdW = intRootVdW(v, W1, sdt);
double BS_vol = sqrt((1.0 - rho * rho) * Ivdt);
double BS_spot = exp(-0.5 * rho * rho * Ivdt + rho * IsvdW);
return BS_call_price(BS_spot, K, 1.0, BS_vol);}
void compute_V(Vector& v, const Vector& Wtilde, double H, double eta, double xi,
    double dt) {
v[0] = xi;
for (int i = 1; i < v.size(); ++i)
    v[i] = xi
            * exp(
                    eta * Wtilde[i - 1]
                            - 0.5 * eta * eta * pow(i * dt, 2 * H));}

double intVdt(const Vector & v, double dt) {
return dt * std::accumulate(v.begin(), v.end(), 0.0);}
double intRootVdW(const Vector & v, const Vector & W1, double sdt) {
double IsvdW = 0.0;
for (size_t i = 0; i < v.size(); ++i)
    IsvdW += sqrt(v[i]) * sdt * W1[i];
return IsvdW;}
double pnorm(double value) {
return 0.5 * erfc(-value * M_SQRT1_2); }
double BS_call_price(double S0, double K, double tau, double sigma, double r) {
double d1 = (log(S0 / K) + (r + 0.5 * sigma * sigma) * tau)
        / (sigma * sqrt(tau));
double d2 = d1 - sigma * sqrt(tau);
return pnorm(d1) * S0 - pnorm(d2) * K * exp(-r * tau);}
#包括“rBergomi.h”
双重更新乔洛夫斯基(向量和Wtilde,常量向量和W1,
向量V,双η,双H,双ρ,双席,
双T,双K,整数N){
双dt=T/N;
双sdt=sqrt(dt);
scaleVector(Wtilde,pow(T,H));//时间T的缩放Wtilde
计算V(V,WLTLE,H,η,席,dt);/ /计算瞬时方差V
双Ivdt=intVdt(v,dt);
双IsvdW=INTROTVDW(v,W1,sdt);
双BS_vol=sqrt((1.0-ρ*ρ)*Ivdt);
双圆点=exp(-0.5*rho*rho*Ivdt+rho*IsvdW);
返回BS_call_price(BS_spot,K,1.0,BS_vol);}
虚席计算(向量V,const向量和WTIDE,双H,双η,双XI,
双dt){
V〔0〕=席;
对于(int i=1;i
我通过使用
-lpython-dynamiclib
解决了链接问题,给出了:

swig -c++ -python RBergomi.i

g++ -O2 -fPIC -c RBergomi.cpp

g++ -O2 -fPIC -c  RBergomi_wrap.cxx -I/Users/hammouc/anaconda/include/python2.7

g++ -lpython -dynamiclib RBergomi.o RBergomi_wrap.o -o _RBergomi.so

您需要链接到python。