Я пытаюсь создать аддон cpp.js, который имеет встроенный python и другие библиотеки.
Когда я компилирую и запускаю код с помощью следующей команды, все равно perfect :
g++ -std=c++11 -Wall -O3 code_pred.cpp -lstdc++fs -lpython3.6m -I/usr/include/python3.6m/ `pkg-config --cflags --libs opencv` -o code_test
Затем я пытаюсь запустить то же самое через node-gyp configure build
Он компилируется без проблем. Но когда я пытаюсь запустить его через js, он не может загрузить скрипт:
import time #deleting this part has no effect on output
#some simple var initializing
print("HIIIIIIIII")
И он возвращает это сообщение об ошибке (это ошибка времени выполнения Python):
ImportError: numpy.core.multiarray failed to import
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
from apport.packaging_impl import impl as packaging
File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 24, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ImportError: /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
Original exception was:
ImportError: numpy.core.multiarray failed to import
HIIIIIIIIIIIIIIIIIIIIIII
Когда я пытаюсь импортировать другие библиотеки, такие как tenorflow, cv2 или даже больше ошибок типа , генерируется (аналогично вышеописанному), и печать больше не работает.
Я думаю, что мой файл binding.gyp играет важную роль в этом.
поэтому я делюсь этим здесь:
{
"targets": [
{
"target_name": "HWE",
"dependencies": [
],
"include_dirs": [
"<!(pkg-config --cflags opencv )",
"<!(python3.6-config --cflags)",
"<!(node -e \"require('nan')\")",
],
"sources": [
"./src/addon/addon.cpp"
],
"cflags": ["-w", "-Wall", "-Wextra", "-pedantic", "-Wsign-compare", "-Wno-sign-compare"],
"cflags_c": ["-std=c11", "-Wno-unused-parameter","-stdlib=libc++"],
"cflags_cc": ["-std=c++11", "-fexceptions"],
"cflags_cc!": ["-fno-rtti","-fno-exceptions" ],
"conditions": [
[
"OS=='linux'", {
'cflags': [
"<!(pkg-config --cflags opencv )",
"<!(python3.6-config --cflags)"
],
# 'ldflags': [
# "-Wl,-z,defs"
# ],
"libraries": [
"<!(pkg-config --libs opencv )",
"<!(python3.6-config --ldflags)",
"-lpython3.6m",
"-lpthread",
"-ldl",
"-lutil",
"-lm",
"-DPYTHON_LIBRARY",
]
}
],
[
'OS=="mac"', {
"link_settings": {
'ldflags': [
'-Wl',
'-L/usr/local/opt/opencv3/lib'
],
"libraries": [
"-lopencv_core",
"-lopencv_highgui",
"-lopencv_videoio",
"-lopencv_imgcodecs",
"-lopencv_objdetect",
"-lopencv_imgproc",
"-lpython3.6m"
]
},
'xcode_settings': {
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
# 'OTHER_CFLAGS': [ '-O3', '-march=native', '-w' ],
'OTHER_CPLUSPLUSFLAGS' : ['-Wno-c++11-narrowing', '-Wno-sign-compare', '-std=c++11', '-stdlib=libc++'],
'OTHER_LDFLAGS': ['-stdlib=libc++','-L/usr/local/opt/opencv3/lib'],
}
}
]
]
}
]
}
Я использовал #include <python.h>
для встраивания в него Python, а также #include <numpy/ndarrayobject.h>
.
когда я удаляю строку #include <numpy/ndarrayobject.h>
из кода C ++. скопированная ошибка (int над текстом) исчезает. Но как только импортируется тензор потока, я получаю подобные ошибки.
заметки :
Угадай: ошибка связана с динамическим связыванием библиотек ...
У меня есть одна библиотека numpy с использованием pip3 на python3.6 и pip на python2.7.
У меня было несколько виртуальных сред, которые я тестировал в них (та же ошибка), а затем удалил. Я думаю, что это не связано с ними.
Я могу импортировать _ctypes или apt_pkg или numpy.core.multiarray или тензор потока и ... без ошибок в python.
Я проверил sys.path
из кода, выполняемого js, а также автономный код, который генерирует оба: напечатаны почти одинаковые строки.
Также протестировано platform.python_version()
Обе показывает версию 3.6.7
Чтобы сообщить читателю:
- Ubuntu v18.04.2
- питоны v2.7.15rc1
- Python v3.6.7
- node-gyp v3.6.2
- узел v8.10.0
- npm v3.5.2