将共享库与可执行文件链接

时间:2018-03-14 07:23:58

标签: c++ boost compilation g++ shared-libraries

我对编译c ++代码和共享库有一点疑问。

所以我有两个文件main.cppsample.cpp

的main.cpp

#include <iostream>
using namespace std;

#include "sample.h"

myStruct obj;

void populateData() {
        obj.s = "hello world";
}

myStruct giveData() {
        cout << "Inside main: " << obj.s << endl;
        return obj;
}

int main() {
        populateData();
}

sample.h

#ifndef SAMPLE_H
#define SAMPLE_H

#include <string>

struct myStruct {
        std::string s;
        void populateData();
};

myStruct giveData();

#endif

sample.cpp的

#include "sample.h"
#include <iostream>
#include <boost/python.hpp>

using namespace std;

void myStruct :: populateData() {
        cout << giveData().s;
}

BOOST_PYTHON_MODULE(boosts) {
        using namespace boost::python;

        class_<myStruct>("struct")
                .add_property("s", &myStruct::s)
                .def("populateData", &myStruct::populateData)
        ;
}

我使用

编译程序
g++ -c -fPIC sample.cpp
g++ -c -fPIC main.cpp
g++ -shared -Wl,-soname,boosts.so -o boosts.so sample.o main.o -lpython2.7 -lboost_python
g++ -o main main.o
./main

现在,当我运行main时,它会填充string内的obj。但是当我运行导入boosts.so的python脚本时,obj.s为空。

我猜这是因为库boosts.so没有与可执行文件main正确链接。

我该如何解决这个问题?

0 个答案:

没有答案