Linux编译安装libmodbus库
2021/10/25 7:12:48
本文主要是介绍Linux编译安装libmodbus库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
废话不多说,直接进入正题~~~
下载
使用git工具下载libmodbus库源码
git clone git://github.com/stephane/libmodbus
安装
下载好后会出现一个libmodbus的文件夹在当前目录下。
cd libmodbus
还需要安装libtool工具
sudo apt-get install libtool
然后执行autogen.sh文件
./autogen.sh
khadas@Khadas:~/app/locke/libmodbus$ ./autogen.sh libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'. libtoolize: linking file 'build-aux/ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. libtoolize: linking file 'm4/libtool.m4' libtoolize: linking file 'm4/ltoptions.m4' libtoolize: linking file 'm4/ltsugar.m4' libtoolize: linking file 'm4/ltversion.m4' libtoolize: linking file 'm4/lt~obsolete.m4' configure.ac:33: installing 'build-aux/compile' configure.ac:32: installing 'build-aux/missing' src/Makefile.am: installing 'build-aux/depcomp' ------------------------------------------------------ Initialized build system. You can now run ./configure ------------------------------------------------------
成功!
接着配置,在libmodbus文件夹里新建一个install文件夹用来存放编译生成的相关文件。
mkdir install
./configure --prefix=/home/khadas/app/locke/libmodbus/install
/home/khadas/app/locke/libmodbus/install为安装路径
输出结果为
checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking how to create a pax tar archive... gnutar checking whether make supports the include directive... yes (GNU style) checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking whether gcc understands -c and -o together... yes checking dependency style of gcc... gcc3 checking for gcc option to accept ISO C99... none needed checking for gcc option to accept ISO Standard C... (cached) none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking whether make supports nested variables... (cached) yes checking build system type... aarch64-unknown-linux-gnu checking host system type... aarch64-unknown-linux-gnu checking how to print strings... printf checking for a sed that does not truncate output... /usr/bin/sed checking for fgrep... /usr/bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking how to convert aarch64-unknown-linux-gnu file names to aarch64-unknown-linux-gnu format... func_convert_file_noop checking how to convert aarch64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... no checking how to associate runtime and link libraries... printf %s\n checking for ar... ar checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for a working dd... /usr/bin/dd checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1 checking for mt... mt checking if mt is a manifest tool... no checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... no checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking byteswap.h usability... yes checking byteswap.h presence... yes checking for byteswap.h... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking linux/serial.h usability... yes checking linux/serial.h presence... yes checking for linux/serial.h... yes checking netdb.h usability... yes checking netdb.h presence... yes checking for netdb.h... yes checking netinet/in.h usability... yes checking netinet/in.h presence... yes checking for netinet/in.h... yes checking netinet/tcp.h usability... yes checking netinet/tcp.h presence... yes checking for netinet/tcp.h... yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/params.h usability... no checking sys/params.h presence... no checking for sys/params.h... no checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking for sys/types.h... (cached) yes checking termios.h usability... yes checking termios.h presence... yes checking for termios.h... yes checking time.h usability... yes checking time.h presence... yes checking for time.h... yes checking for unistd.h... (cached) yes checking for asciidoc... no checking for xmlto... no checking whether to build documentation... no configure: WARNING: The tools to build the documentation aren't installed checking whether __CYGWIN__ is declared... no checking for accept4... yes checking for getaddrinfo... yes checking for gettimeofday... yes checking for inet_ntoa... yes checking for select... yes checking for socket... yes checking for strerror... yes checking for strlcpy... no checking for inline... inline checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking dependency style of g++... gcc3 checking how to run the C++ preprocessor... g++ -E checking for ld used by g++... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes checking for g++ option to produce PIC... -fPIC -DPIC checking if g++ PIC flag -fPIC -DPIC works... yes checking if g++ static flag -static works... yes checking if g++ supports -c -o file.o... yes checking if g++ supports -c -o file.o... (cached) yes checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes checking dynamic linker characteristics... (cached) GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking for int64_t... yes checking for size_t... yes checking for ssize_t... yes checking for uint16_t... yes checking for uint32_t... yes checking for uint8_t... yes checking winsock2.h usability... no checking winsock2.h presence... no checking for winsock2.h... no checking whether TIOCSRS485 is declared... yes checking whether TIOCM_RTS is declared... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating src/modbus-version.h config.status: creating src/win32/modbus.dll.manifest config.status: creating tests/Makefile config.status: creating doc/Makefile config.status: creating libmodbus.pc config.status: creating config.h config.status: creating tests/unit-test.h config.status: executing depfiles commands config.status: executing libtool commands libmodbus 3.1.6 =============== prefix: /home/khadas/app/locke/libmodbus/install sysconfdir: ${prefix}/etc libdir: ${exec_prefix}/lib includedir: ${prefix}/include compiler: gcc cflags: -g -O2 ldflags: documentation: no tests: yes
下一步,make&&make install
make make install
输出结果为
Making install in src /usr/bin/mkdir -p '/home/luo/locke/libmodbus/libmodbus/install/lib' /bin/bash ../libtool --mode=install /usr/bin/install -c libmodbus.la '/home/luo/locke/libmodbus/libmodbus/install/lib' libtool: install: /usr/bin/install -c .libs/libmodbus.so.5.1.0 /home/luo/locke/libmodbus/libmodbus/install/lib/libmodbus.so.5.1.0 libtool: install: (cd /home/luo/locke/libmodbus/libmodbus/install/lib && { ln -s -f libmodbus.so.5.1.0 libmodbus.so.5 || { rm -f libmodbus.so.5 && ln -s libmodbus.so.5.1.0 libmodbus.so.5; }; }) libtool: install: (cd /home/luo/locke/libmodbus/libmodbus/install/lib && { ln -s -f libmodbus.so.5.1.0 libmodbus.so || { rm -f libmodbus.so && ln -s libmodbus.so.5.1.0 libmodbus.so; }; }) libtool: install: /usr/bin/install -c .libs/libmodbus.lai /home/luo/locke/libmodbus/libmodbus/install/lib/libmodbus.la libtool: finish: PATH="/home/luo/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/sbin" ldconfig -n /home/luo/locke/libmodbus/libmodbus/install/lib ---------------------------------------------------------------------- Libraries have been installed in: /home/luo/locke/libmodbus/libmodbus/install/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the '-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the 'LD_RUN_PATH' environment variable during linking - use the '-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to '/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /usr/bin/mkdir -p '/home/luo/locke/libmodbus/libmodbus/install/include/modbus' /usr/bin/install -c -m 644 modbus.h modbus-version.h modbus-rtu.h modbus-tcp.h '/home/luo/locke/libmodbus/libmodbus/install/include/modbus' Making install in doc make[2]: 对“install-exec-am”无需做任何事。 Making install in tests make[2]: 对“install-exec-am”无需做任何事。 make[2]: 对“install-data-am”无需做任何事。 make[2]: 对“install-exec-am”无需做任何事。 /usr/bin/mkdir -p '/home/luo/locke/libmodbus/libmodbus/install/share/doc/libmodbus' /usr/bin/install -c -m 644 MIGRATION README.md AUTHORS NEWS '/home/luo/locke/libmodbus/libmodbus/install/share/doc/libmodbus' /usr/bin/mkdir -p '/home/luo/locke/libmodbus/libmodbus/install/lib/pkgconfig' /usr/bin/install -c -m 644 libmodbus.pc '/home/luo/locke/libmodbus/libmodbus/install/lib/pkgconfig'
编译成功后,在刚刚创建的install文件夹下,会输出include头文件以及lib库文件,将lib下的3个动态库libmodbus.so.x.x,项目所在环境的/usr/lib目录
sudo cp -r lib/libmodbus.so* /usr/lib
使用:
在项目makefile文件中 -L./lib -lmodbus 在调用函数的c文件中引入.h文件
这篇关于Linux编译安装libmodbus库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法