寻求linux for arm7环境下,nodejs调用.so动态库出错问题的解决方法

硬件环境:raspberry Pi3B+
系统环境:raspbian-stretch-lite
nodejs版本:v8.11.3

node-ffi:v2.2.0

linux平台开发新手一枚,刚入坑~
问题:nodejs通过node-ffi模块调用外部的.so文件,加载总是报错,无法成功调用。
不清楚了不了解是什么原因。但相同的.dll文件我在win平台可以调用成功。
特来请教大牛师父帮解惑。

我要达到的目的是:
能够象win平台那样,在linux平台下也能完成nodejs对.so动态库的调用。
谢谢

附图:图片说明
图片说明
图片说明

0

2个回答

估计我跟你水平相当吧,我也是主要做Windows,接触过linux编程,你这个提示就是so文件没放在可以加载的路径里面,所以未读取到动态库,你确认一下有几个lib文件夹,哪个文件夹是能够正常加载到的,你们公司有没有做linux的同事,可以交流一下。

0
weixin_42849653
weixin_42849653 回复phenix2009: 哈哈,不好意思,给。
10 个月之前 回复
phenix2009
白色一大坨 回复weixin_42849653: 老兄问个问题,是不是只要不接帖,你分数就不用给出来啊?
11 个月之前 回复
phenix2009
白色一大坨 回复weixin_42849653: 咱们主做Windows的人,不要跟动态库这些折腾,最好交给专门弄linux的人去把环境设置好,扬长避短,如果想了解可以进一步系统学习,但是难度比较大非一日之功啊。
11 个月之前 回复
weixin_42849653
weixin_42849653 回复phenix2009: 嗯嗯,谢谢~问题不是出在路径位置,应该是编译环境上的问题,这个so是外部提供的,在我现在的平台用不了,我让对方重新编译试下
11 个月之前 回复
phenix2009
白色一大坨 我当初做时候也因为不了解库的加载路径放错过位置导致类似问题,系统里面的lib文件夹肯定不止一个你一定要确认一下你现在那个lib文件是不是加载动态库文件的
11 个月之前 回复

libSunVoteSDK.so的路径不对,报错提示未找到该文件。 要添加动态库到搜索路径 echo path/to/*.so >> /etc/ld.so.conf

0
u011031257
J.zhang11 回复weixin_42849653:那你就要检查一下文件是否真的被复制进去了,树莓派上如果你是非root用户/usr/local/lib是不可写入的,要加sudo
11 个月之前 回复
weixin_42849653
weixin_42849653 我把so文件复制到了默认的/usr/local/lib目录中了。在ld.so.conf.d\libc.conf中默认是/usr/local/lib
11 个月之前 回复
weixin_42849653
weixin_42849653 我把so文件复制到了默认的/usr/local/lib目录中了。在ld.so.conf.d
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
nodejs调用动态库so
系统环境:Centos7,python2.7nodejs可以通过ffi调用c接口。安装ffi:1、npm install -g node-gyp,如果安装前提示ssl相关错误,则需先安装ssl,使用命令yum install openssll2、npm install ffi bindings --save 安装模块到项目目录下生成动态库:1、编写测试文件//////add.cint add(in...
通过ffi在nodejs中调用动态链接库(.so文件)
通过ffi在nodejs中调用C接口 概述 获取C接口的指针内容 异步调用 实际案例 通过ffi在nodejs中调用C接口 概述 注意事项! ffi只能调用C风格的模块。 需要将C源码build成动态链接库以供调用,在Linux下将C源码build成.so文件,在windows下build成.dll文件。 获取C接口的指针内容 异步调用 实际案例
node ffi调用C、C++动态库出现的问题
node js 调用C/C++动态库时候,使用ffi模块出现无法正常调用C++生成的动态库,原因是由于C++的函数重载,导致编译之后的函数名不确定,导致NODE不能调用,解决办法是将要使用的函数用C的风格编写,实质上使用EXTERN “C”;           编译生成动态库命令:                       g++/gcc -fPIC -shared
Linux中关于JAVA调用C生成的.so动态链接库
第一步.首先,我们先写个JAVA类:public class HelloJNI { static { System.loadLibrary("HelloWorld"); //链接库的名字} public native static void setNum(int num); //链接库的方法public native static int get();//链接库的方法public static
linux 动态库同名问题
万事皆有缘由,还是先从我遇到的这个问题说起~~~问:有一个主执行程序main,其中实现了函数foo(),同时调用动态库liba.so中的函数bar(),而动态库liba.so中也实现了foo()函数,那么在执行的时候如果在bar()中调用foo()会调用到哪一个?在main()中调用呢? 直接给答案:如果是在Linux上,liba.so中的foo()函数是一个导出的(extern)”可见”函数,那...
linux环境下的c++ 动态库的调用
主要是为了平时的学习记录,不妥的地方,烦请指点。一.下面主要是dlopen打开动态库.so相关的API接口函数。1. void* dlopen(const char* filename,int flag);filename 是动态库的path路径,flag是动态库加载的几种方法。RTLD_LAZY:dlopen返回前,对动态库中存在的未定义的变量不进行解析,只对函数符号有效,变量符号会被立即加载。...
Linux环境下 lua 调用自定义so动态库(skynet)
最近看的 skynet 使用的 c+lua 的架构,框架提供的是基础的api,所以业务逻辑还得自己去写,如果某些业务逻辑比较耗性能,那可能就需要把某些业务逻辑丢到 c/c++ 去做,提供个接口供 lua 调用。 那么就需要去编个动态库(.so)、静态库(.a)啥的 写c接口(有些类型不严谨,就偷懒不改了,编译时会warning,可无视)
lunix 下php调用c/c++的.so动态链接库
1,下载lunix系统同版本PHP源码安装包并解压:将源码下载解压到系统中即可,不用刻意位置。        wget http://cn2.php.net/distributions/php-5.4.45.tar.gz 2,解压     tar -zxvf php-5.4.45.tar.gz 3.到 /php-5.4.45/ext/ 目录下,使用ext_skel生成扩展骨架: 即生成名为t...
java jna linux导入so动态库及参数对应问题
载入库文件有两个函数,System.load 和 System.loadLibrary。当使用System.load时,需要输入文件的全路径,例如:System.load(“/tmp/test.so”);当使用System.loadlibrary时是在系统的library 的目录中需找复合条件的库文件,可以使用-Djava.library.path=[path]参数,来指定Java程序加载库文件的...
node.js调用动态库
网上找了一大堆,看起来都是可行的,实践时有很多问题,后边在列出部分问题,这里只说一下解决,那就是这些都写的是node.js V0.10.*之前的,现在我装的是v6.11.0 所以说文章还是要写清楚。 代码不复杂,这里分别列出: C++ 动态库的程序 官方提到了,最重要的就是下面这里。 void Initialize(LocalObject> exports); NODE_MODU
linux 动态链接库so的封装及调用
       首先定义hello.c文件 #include <stdio.h> void hello(const char * name) { printf("Hello , %s!\n", name); }        定义hello.h头文件 #ifndef HELLO_H #define HELLO_H int g_count = 100; vo...
tomcat解决含有linux动态链接库的文件so的deploy web项目不需要重启tomcat的方法
这个问题困扰我很久了,到现在依然不太懂其原理,但是好在成功解决了这个问题,网上有答案,但是比较简单,无法做到跟着一步一步就可以成功,为此,特意写这个,希望能帮到更多的人。1.libTest.so文件放到linux系统的java.library.path目录下(System.getProperty(“java.library.pah”)可以得到)2.新建一个加载soload的java项目static...
Java调用C/C++动态库so
参考网址 关于java调用C接口时,类型的转换,如char*  http://blog.csdn.net/zht666/article/details/22786123 JNI的替代者—使用JNA访问Java外部功能接口  http://www.cnblogs.com/lanxuezaipiao/p/3635556.html 注意事项: ① 下载jna.jar包 ,地址  ht
Linux下python调用动态库
首先,创建一个简单的动态库 编程生成dll.so: gcc -fPIC -O2 -shared dll.c -o dll.so C文件:dll.c 如下 #include
linux 下 动态链接库 so 之间的符号冲突
在 linux 下编写动态链接库程序,需要注意 dll 之间的符号冲突。 当我们链接库需要提供给很多方集成使用,需要面对复杂的集成环境,其中一个大问题就是与第三方集成环境的符号冲突。 这些冲突有些不是通过严格控制名字空间解决的,比如当我们使用了一些开源库,我们不清楚第三方集成环境有没有这些库,即使有是不是版本匹配,我们也不想对第三方集成环境提太多要求,这会增加集成成本。在这种情况下,我们会将这
linux中java通过jni调用so动态库中的方法
项目中需要调用so动态库中的方法来实现需要的功能,所以需要在java项目中通过jni的方式实现调用。 本次学习记录所对应的场景为: 已经有so库和对应方法的头文件提供。 项目提供的so和头文件不是jni的头文件,所以需要自己通过提供的头文件,编写jni方法,然后重新编译一个so文件,然后再把两个so同时加载。(刚开始接触,不知道能不能在没有源码的情况下把两个so编译合并为一个so,这样就...
(更新1)ubuntu下的动态链接库(.so )问题(以opencv为例)
首先需要指出,如果你的shell已经是root管理情况,那就直接按照转载的方法执行就可以了。 如果你是非root的正常访问模式,那就在执行每一条指令的最开始加入sudo,以下为非root模式。 例如,需要配置opencv的动态链接库,那首先打开目录 cd /etc/ld.so.conf 然后,新建一个名为opencv.conf的文件,并在文件里添加你所安装的opencv的动态库绝对路径,可...
通过ffi在node.js中调用动态链接库
通过ffi在nodejs中调用动态链接库sodll文件 概述 为什么要在nodejs中调用动态链接库 ffi简介与安装 注意事项 煎蛋栗子 获取C接口的指针内容 异步调用 实际案例 通过ffi在node.js中调用动态链接库(.so/.dll文件)概述为什么要在node.js中调用动态链接库 由于腾讯体系下的许多公共的后台服务(L5, CKV, msgQ等)已经有了非常成熟的C/C++编写的API,
python 调用so dll动态链接库
ctypes使得python能够直接调用c语言开发的动态链接库,非常强大。 为了使用CTypes,你必须依次完成以下步骤: * 编写动态连接库程序 * 载入动态连接库 * 将Python的对象转换为ctypes所能识别的参数 * 使用ctypes的参数调用动态连接库中的函数 一、Windows下使用Python的ctypes调用Dll动态链接库 编写dll文件 打开VS200
关于java jni调用c++动态库的一些问题及解决方法
最近使用java jni接口技术调用c++完成的动态库,平台为虚拟机下的centos 6.6。 编译出来的*.so 文件在被java调用过程中出现了各种错误。 1. java com.cmsz.znw.filevalmain.FileValServerImpl Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/
Linux下Eclipse进行C++编程动态库so的生成与使用
本文主要介绍了Linux使用Eclipse进行C++编写动态库so 的生成与使用方法,提供示例代码,并给出部分编译错误的解决方案。
Mono.NET Linux下使用动态链接库教程
最终目标使用.net开发的程序可以引用C/C++编写的链接库实现具体的业务功能问题描述在Windows平台下我们可以通过DllImport的方式引入一个“.dll”文件来实现动态库的开发,但是如果直接把代码Copy到Linux下面执行就不可行了,本文重点将怎么在.net开发的程序运行在Linux下面并调用动态链接库干货1. 找到第三方链接库的Linux版本,通常是“.so”文件 2. 将找到的.s
在Linux中静态库.a和动态库.so 的创建和使用
 我们通常把一些公用函数制作成函数库,供其它程序使用。 函数库分为静态库和动态库两种。   1. 静态函数库       这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数
在linux下制作libxxx.so 动态库以及使用方法
在linux下面动态库的使用是非常常用的,也是非常实用的。 步骤一: 创建一个.h头文件 ,头文件中声明动态库中的函数 #ifndef _TEST_H_ #define _TEST_H_ #ifdef __cplusplus /*c c++ 混合编程*/ extern "C" { #endif /*c c++ 混合编程*/ int
linux下动态链接库(.so)的显式调用和隐式调用
进入主题前,先看看两点预备知识。 一、显示调用和隐式调用的区别         我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。
qt 动态链接库(.so)使用举例(linux)
首先编写一个hello.c #include int hello() {     printf("hello lynne!\n"); } 编译命令:gcc -c hello.c,生成hello.o文件 编译命令:gcc -shared -o libtest.so hello.o得到libtest.so动态连接库文件 正题开始: 创建一个qt空工程,右键add new一个mi
Linux下指定so动态库的加载路径
     转载地址:https://blog.csdn.net/zorelemn/article/details/52596293一、库文件的搜索路径:1、在配置文件/etc/ld.so.conf中指定动态库搜索路径(需要添加其它库文件的路径,在文件的最后添加具体的路径即可 [ 如:/usr/local/lib ],添加后保存退出,然后在命令行ldconfig2、通过环境变量LD_LIBRARY_...
在Linux环境下打包成动态库。
在Linux环境下打包成so动态库,被java调用。 一、用到了ndk技术。(略说)    1.生成头文件 .h    2.C/C++接口代码被jni调用。 二、打包so动态库如下: 1.打包成扩展名为o的文件。      g++ -fPIC -D_REENTRANT -I     /usr/lib/jvm/jdk1.8.0_111/include   -I  
qt在Windows下生成包含动态库的动态库
需要生成一个动态库,其中还需要调用厂家提供的动态库cc_32.dll,步骤: 1、文件-新建文件或项目-库-c++-库-选择-共享库-修改名字cclib,下一步,完成。 2、将cc_32.h和cc_32.lib拷贝到程序目录下,在项目中右键添加现有文件cc_32.h. 3、在cclib.h增加函数定义,QString read(); 4、在cclib.cpp增加头文件cc_32.h和其他
Linux下静态、动态库(隐式、显式调用)的创建和使用及区别
Linux下静态、动态库(隐式、显式调用)的创建和使用及区别 一、静态链接库的创建与使用: 1、编写add.c 及main.c代码: /**************************************************************************/ /*add.c*/ int add(int x, int y) { return x + y;
Linux下运行时调用动态链接库.so的三种方法(笔记)
在/etc/ld.so.conf.d/下创建xxx.conf,在文本中加入.so所在路径,如:/usr/xxx等等,然后使用相应ldconfig命令使之生效。 将.so所在路径添加为PATH环境变量。 在编译命令中使用-Wl,-rpath=./参数,并将相应.so拷贝到执行目录;当然也可以将‘./’指定为其他目录。 注意:-L参数添加的lib搜索目录只用于编译时,运行时需使用上述方法之一,否则...
linux下so覆盖导致coredump问题的分析
转载地址:http://blog.sina.com.cn/s/blog_622a99700100pjv3.html 尝试解答以下问题:       1.为什么cp的方式更新运行中进程的so,程序会coredump       2.采用什么方式更新已经加载了的so,就可以避免coredump   我们的公共组件绝大部分都支持so形式的自定义插件,比如s++,
linux下gcc编译 .c文件生成动态链接库 .so文件,并测试调用该链接库
简单介绍:linux中so文件为共享库,和windows下dll相似;so可以共多个进程调用,不同进程调用同一个so文件,所使用so文件不同;so原文件不需要main函数;实例,1.通过mysqlTest.c中的函数mysql(),生成一个libmysql.so链接库#include<stdio.h> #include<stdlib.h> #include<errno...
lua 调用C++动态库
Lua调用C++动态库
java调用so动态链接库
用JNI实现 实例: 创建HelloWorld.java class HelloWorld { private native void print(); public staticvoid main(String[] args) { new HelloWorld().print(); } static { System.loadLibrary("HelloWorld
Qt调用第三方C动态库.so
此处的编译器必须为交叉编译器: 以csdn文件为例: 1、将现有的文件编译为动态库: gcc -O -fPIC -shared -o libcsdn.so csdn.h csdn.c 2、将文件添加到项目路径: 将libcsdn.so文件和csdn.h文件复制到.pro文件同级目录 3、在.pro文件中添加代码: LIBS += ./libcsdn.so 4、在项目...
linux .so动态库makefile的嵌套调用
1、动态库的编译 下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:test.h,三个.c文件:test_a.c、 test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。 test.h:  #include   "stdio.h" void test_a(); void test_b(); void test_c();   test...
linux .so动态库makefile的嵌套调用
1、动态库的编译 下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:test.h,三个.c文件:test_a.c、 test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。 test.h:  #include   "stdio.h" void test_a(); void test_b(); void test_c();   test
Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现
这篇笔记通过mcc将.m函数编译成动态链接库供c++调用的方式实现从c++中调用matlab里面的自己写的函数。其实,调用自己编写的m函数,只是多了一步将自己的matlab函数编译成动态链接库文件(也就类似自带的那种eigen.h和libeng.so)。实验平台:ubuntu 12.04 + g++4.6 + matlab2012a
一个例子秒懂动态库与静态库的调用【详解】(.so和.a文件的相互调用)
#include "test1.h" int add(int a, int b) { return a+b; }
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链nodejs教程 nodejs微信开发教程