Pybind11 с Systemc с использованием Cmake: ImporterrorC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Pybind11 с Systemc с использованием Cmake: Importerror

Сообщение Anonymous »

Я работаю с проектом Systemc, в котором я хотел бы добавить привязки Python с помощью Pybind11, и я следил за документами на сайте здесь, чтобы написать привязки. Так выглядит мои Cmakelists: < /p>

project(simple_fifo_python)
cmake_minimum_required(VERSION 3.0)

find_package(pybind11 CONFIG REQUIRED)
message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}")

find_library(SC_LIB systemc $ENV{SYSTEMC_HOME}/lib-linux64 REQUIRED)

pybind11_add_module (simple_fifo_python simple_fifo.cpp)
target_compile_options(simple_fifo_python PUBLIC -Wall)
target_include_directories(simple_fifo_python PUBLIC $ENV{SYSTEMC_HOME}/include)
target_link_libraries(simple_fifo_python PUBLIC ${SC_LIB})
< /code>

Мой код, который собирается с использованием этого, выглядит так: < /p>

#include
#include
#include

class write_if : virtual public sc_interface
{
public:
virtual void write(char) = 0;
virtual void reset() = 0;
};

class read_if : virtual public sc_interface
{
public:
virtual void read(char &) = 0;
virtual int num_available() = 0;
};

class fifo : public sc_channel, public write_if, public read_if
{
public:
fifo(sc_module_name name) : sc_channel(name), num_elements(0), first(0) {}

void write(char c) {
if (num_elements == max)
wait(read_event);

data[(first + num_elements) % max] = c;
++ num_elements;
write_event.notify();
}

void read(char &c){
if (num_elements == 0)
wait(write_event);

c = data[first];
-- num_elements;
first = (first + 1) % max;
read_event.notify();
}

void reset() { num_elements = first = 0; }

int num_available() { return num_elements;}

private:
enum e { max = 10 };
char data[max];
int num_elements, first;
sc_event write_event, read_event;
};

class producer : public sc_module
{
public:
sc_port out;

SC_HAS_PROCESS(producer);

producer(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}

void main()
{
const char *str =
"This can really work with pybind11 yo peeepalsssssss!\n";

while (*str)
out->write(*str++);
}
};

class consumer : public sc_module
{
public:
sc_port in;

SC_HAS_PROCESS(consumer);

consumer(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}

void main()
{
char c;
cout

Я компилирую это, следуя репозиторию cmake_example, и команда PIP работает успешно, и генерает колесо, которое я могу импортировать.(py37) mayank@b101l:~/test/pybindmod/simple_fifo$ python
Python 3.7.1 (default, Oct 23 2018, 19:19:42)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import simple_fifo_python
Traceback (most recent call last):
File "", line 1, in
ImportError: /home/mayank/tools/lib-linux64/libsystemc-2.3.2.so: undefined symbol: sc_main
>>>
< /code>

Это мой первый проект, работающий с Pybind и Cmakelists с несколькими зависимостями, поэтому я не могу выяснить, откуда эта ошибка. Любая помощь будет очень оценена.


Подробнее здесь: https://stackoverflow.com/questions/533 ... mporterror
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»