私は小さなc++モジュールを持っています:(このコードはひどいですが、それはプロトタイプにすぎません)
librecv.cpp:
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <string>
#include <stdio.h>
#include <cstdlib>
typedef boost::interprocess::allocator<float, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator;
typedef boost::interprocess::vector<float, ShmemAllocator> DataVector;
void _init()
{
printf("Initialization of shared object\n");
}
void _fini()
{
printf("Clean-up of shared object\n");
}
void work()
{
boost::interprocess::managed_shared_memory segment(boost::interprocess::open_only, "MySharedMemory");
DataVector *myvector = segment.find<DataVector>("MyVector").first;
for(int i = 0; i < 100; ++i) //Insert data in the vector
{
printf("%f ", (float)myvector->at(i));
}
};
Pythonコードで関数「work」を使用したいC++ライブラリをコンパイルしようとしています:(ここで何かを見逃してもいいですか?)
g++ -fPIC -c librecv.cpp -lboost_system -lrt
g++ -shared -o libtest.so.1.0 -lc librecv.o
Pythonコード:
from ctypes import *
libtest = cdll.LoadLibrary('./libtest.so.1.0') #python should call function "_init" here, but nothing happens
libtest.work
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/ctypes/__init__.py", line 378, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 383, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: ./libtest.so.1.0: undefined symbol: work
OS:Ubuntu抜け道はありますか?PS私の書き込みミスでごめんなさい。私の母国語ではない英語