gianfrdp / SDM120C

sdm120c ModBus Mini Smart Meter
GNU General Public License v2.0
72 stars 37 forks source link

undefined reference to `rnd_usleep' / `tv_diff' #17

Closed asarubbo closed 6 months ago

asarubbo commented 5 years ago

I got compilation failure (maybe a because of a recent compiler):

$ cc -I/usr/include/modbus sdm120c.c -lmodbus
sdm120c.c: In function 'log_message':
sdm120c.c:264:24: warning: format not a string literal and no format arguments [-Wformat-security]
        fprintf(stderr, buffer);
                        ^~~~~~
sdm120c.c:273:30: warning: format not a string literal and no format arguments [-Wformat-security]
             syslog(LOG_INFO, versionbuffer);
                              ^~~~~~~~~~~~~
sdm120c.c:276:30: warning: format not a string literal and no format arguments [-Wformat-security]
             syslog(LOG_INFO, parent);
                              ^~~~~~
sdm120c.c:277:30: warning: format not a string literal and no format arguments [-Wformat-security]
             syslog(LOG_INFO, cmdline);
                              ^~~~~~~
sdm120c.c:280:26: warning: format not a string literal and no format arguments [-Wformat-security]
         syslog(LOG_INFO, buffer);
                          ^~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /tmp/cciVWOgy.o: in function `AddSerLock':
sdm120c.c:(.text+0xe00): undefined reference to `rnd_usleep'
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /tmp/cciVWOgy.o: in function `getMeasureFloat':
sdm120c.c:(.text+0x12cb): undefined reference to `tv_diff'
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: sdm120c.c:(.text+0x1348): undefined reference to `tv_diff'
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /tmp/cciVWOgy.o: in function `lockSer':
sdm120c.c:(.text+0x20e0): undefined reference to `rnd_usleep'
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: sdm120c.c:(.text+0x258f): undefined reference to `rnd_usleep'
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: sdm120c.c:(.text+0x25ff): undefined reference to `tv_diff'
collect2: error: ld returned 1 exit status

$ cc -v
Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/8.3.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /var/tmp/portage/sys-devel/gcc-8.3.0-r1/work/gcc-8.3.0/configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/8.3.0 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/8.3.0 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/8.3.0/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/8.3.0/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/g++-v8 --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/8.3.0/python --enable-languages=c,c++,fortran --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --disable-nls --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo 8.3.0-r1 p1.1' --disable-esp --enable-libstdcxx-time --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-multilib --with-multilib-list=m32,m64 --disable-altivec --disable-fixed-point --enable-targets=all --enable-libgomp --disable-libmudflap --disable-libssp --disable-libmpx --disable-systemtap --enable-vtable-verify --enable-lto --without-isl --disable-default-pie --disable-default-ssp
Thread model: posix
gcc version 8.3.0 (Gentoo 8.3.0-r1 p1.1)
asarubbo commented 5 years ago

A quick fix:

-long inline rnd_usleep +static long inline rnd_usleep

-long inline tv_diff +static long inline tv_diff

asarubbo commented 6 months ago

It's fixed for me