我制作了一个极简式的飞镖软件,它可以连接一个串行端口:
import 'package:libserialport/libserialport.dart';
import 'dart:typed_data';
void main(List<String> arguments) {
final port = SerialPort("/dev/pts/4");
if (!port.openReadWrite()) {
print(SerialPort.lastError);
}
port.write(Uint8List.fromList("Lorem Ipsum".codeUnits));
final reader = SerialPortReader(port);
reader.stream.listen((data) {
print('received: $data');
});
}
但一旦我跑了:
dart run
我得到以下错误:
Unhandled exception:
Invalid argument(s): Failed to load dynamic library 'libserialport.so': libserialport.so: cannot open shared object file: No such file or directory
#0 _open (dart:ffi-patch/ffi_dynamic_library_patch.dart:12:43)
#1 new DynamicLibrary.open (dart:ffi-patch/ffi_dynamic_library_patch.dart:23:12)
#2 dylib
package:libserialport/src/dylib.dart:32
#3 _SerialPortImpl._init.<anonymous closure>
package:libserialport/src/port.dart:221
#4 Util.call
package:libserialport/src/util.dart:37
#5 _SerialPortImpl._init
package:libserialport/src/port.dart:221
#6 new _SerialPortImpl
package:libserialport/src/port.dart:211
#7 new SerialPort
package:libserialport/src/port.dart:72
#8 main
bin/serial.dart:5
#9 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)
#10 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
Exited (255)
我在linux机器上运行它。
发布于 2022-08-17 11:41:49
正如您在错误消息中看到的那样,问题是希望在某个地方找到libserial.so库。
首先,我们需要找到这个库并查看它是否已安装:
ldconfig -p | grep libserial
在没有输出的情况下,您可以像看到这里那样安装它。对于基于linux和debian的发行版,运行:
sudo apt-get install libserial0
然后重新运行命令:
ldconfig -p | grep libserial
如果安装后的命令具有输出,则必须检查路径是否为/lib/libserialport.so
。就我而言,情况并非如此:
libserialport.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libserialport.so.0
有时,在此之后,以图书馆的名义,一个数字可能会被附加。在这种情况下,我们可以像这样将libary符号链接到/usr/lib
路径:
sudo ln -s /usr/lib/x86_64-linux-gnu/libserialport.so.0 /usr/lib/libserialport.so
另外,如果库不在/usr/lib/libserial.so
,而是位于/usr/lib
路径内的子文件夹中,则是另一种情况。
发布于 2022-08-19 17:06:00
问题是动态库无法从系统加载。解决办法是
安装libserialport dev包
用于基于Debian的系统使用
sudo apt安装libserialport dev
注意: dart包libserialport使用FFI访问本机API。它使用libserialport (一个用C编写的最小的跨平台共享库),这个包实际上包含c代码。当我们构建或运行应用程序时,应该将其编译为libserial.so,但由于某些原因,直接使用此包时不会发生这种情况。
如果您使用颤振框架使用libserialport包,这将负责创建.so文件,而不会出现任何问题。
https://stackoverflow.com/questions/73387868
复制相似问题