When building the new codec2-0.8 library, I ran into a build error that
I don't see in the 0.7 branch, even when the build environments are
identical.
A small 'diff' is below which will allow the library to build
completely, along with a short explanation.
------------------------------
$ cmake -DCMAKE_BUILD_TYPE=Release ../codec2-0.8
-- The C compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- codec2 version: 0.8
-- Performing Test COMPILER_SUPPORTS_GNU11
-- Performing Test COMPILER_SUPPORTS_GNU11 - Success
-- Build type is: Release
-- Compiler Flags: -O2 -march=native -mtune=native -Wall -g -O3
-- Looking for include file stdlib.h
-- Looking for include file stdlib.h - found
-- Looking for include file string.h
-- Looking for include file string.h - found
-- Looking for floor
-- Looking for floor - found
-- Looking for ceil
-- Looking for ceil - found
-- Looking for pow
-- Looking for pow - found
-- Looking for sqrt
-- Looking for sqrt - found
-- Looking for sin
-- Looking for sin - found
-- Looking for cos
-- Looking for cos - found
-- Looking for atan2
-- Looking for atan2 - found
-- Looking for log10
-- Looking for log10 - found
-- Looking for round
-- Looking for round - found
-- Looking for getopt
-- Looking for getopt - found
-- Configuring done
-- Generating done
-- Build files have been written to:
/home/mattro/Projects/freedv/build-codec2
$ make
-- snip --
[ 35%] Building C object src/CMakeFiles/codec2.dir/freedv_api.c.o
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c: In function
‘freedv_open_advanced’:
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:209:9: error:
‘for’ loop initial declarations are only allowed in C99 mode
for (int i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
^
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:209:9: note:
use option -std=c99 or -std=gnu99 to compile your code
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:227:18: error:
redefinition of ‘i’
for (int i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
^
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:209:18: note:
previous definition of ‘i’ was here
for (int i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
^
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:227:9: error:
‘for’ loop initial declarations are only allowed in C99 mode
for (int i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
^
make[2]: *** [src/CMakeFiles/codec2.dir/freedv_api.c.o] Error 1
make[1]: *** [src/CMakeFiles/codec2.dir/all] Error 2
make: *** [all] Error 2
------------------------------
The equivalent build steps for 0.7 work fine. Perhaps the "int i" could
be moved out of the 'for' statement for maximum compiler compatibility?
When I make that small change to lines 209 and 227, the 0.8 library
builds fine.
------------------------------
diff -ur codec2-0.8/src/freedv_api.c codec2-0.8a/src/freedv_api.c
--- codec2-0.8/src/freedv_api.c 2018-05-24 04:41:22.000000000 -0500
+++ codec2-0.8a/src/freedv_api.c 2018-05-27 11:38:20.986569633 -0500
@@ -206,7 +206,8 @@
if (f->codeword_symbols == NULL) {return NULL;}
f->codeword_amps =
(float*)malloc(sizeof(float)*f->interleave_frames*coded_syms_per_frame);
if (f->codeword_amps == NULL) {return NULL;}
- for (int i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
+ int i = 0;
+ for (i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
f->codeword_symbols[i].real = 0.0;
f->codeword_symbols[i].imag = 0.0;
f->codeword_amps[i] = 0.0;
@@ -224,7 +225,7 @@
f->mod_out =
(COMP*)malloc(sizeof(COMP)*f->interleave_frames*f->n_nat_modem_samples);
if (f->mod_out == NULL) { return NULL; }
- for (int i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
+ for (i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
f->mod_out[i].real = 0.0;
f->mod_out[i].imag = 0.0;
}
------------------------------
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Freetel-codec2 mailing list
Freetel-codec2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freetel-codec2