ld:找不到体系结构x86_64的符号clang:错误:链接器命令失败,退出代码为1

时间:2019-02-11 15:21:08

标签: c++11 g++ swig ld

我正在MAC OS上使用SWIG将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 -shared RBergomi_wrap.o -o RBergomi.so

但是我得到这个错误

“ ld:架构x86_64找不到符号

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

我试图查找问题,并且似乎错误来自使用std :: accumulate,要使用该错误,我需要调用“数字”标头,然后出现问题。如果删除标题“数字”,则不再有先前的错误,但不知道累加。在我的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);}

1 个答案:

答案 0 :(得分:0)

我通过使用-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