I'm getting an undefined symbol
error even though I think I've defined it okay. From reading other posts and Googling, it seems that the linker is failing to find the appropriate symbol. I'm new to C so I'm sure I'm just missing something stupid.
glen-urbans-macbook-pro:everybit glurban$ make
gcc -O3 -DNDEBUG -std=c99 -Wall -Wstrict-prototypes -I. -m64 -DBUILD_64 -c bitarray.c -o bitarray.o
gcc -o everybit main.o ktiming.o bitarray.o tests.o -arch x86_64 -framework CoreServices
gcc -o everybit_harvey main.o ktiming.o bitarray_harvey.o tests.o -arch x86_64 -framework CoreServices
Undefined symbols:
"_bitarray_reverse", referenced from:
_test_reverse in tests.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [everybit_harvey] Error 1
In tests.c:
#include "bitarray.h"
...
/* Peform a reversal operation on test_ba. */
static void testutil_reverse(size_t bit_off, size_t bit_len) {
assert(test_ba != NULL);
bitarray_reverse(test_ba, bit_off, bit_len);
if (test_verbose) {
bitarray_fprint(stdout, test_ba);
fprintf(stdout, " rotate off=%llu, len=%llu\n",
(unsigned long long) bit_off, (unsigned long long) bit_len);
}
}
static void test_reverse(void) {
testutil_frmstr("10000101");
testutil_reverse(0, 8);
testutil_expect("10100001", 4);
}
test_case_t test_cases[] = {
test_headerexamples,
test_8bit,
test_moreflips,
// ADD YOUR TEST CASES HERE
test_reverse,
NULL // This marks the end of all test cases. Don't change this!
};
In bitarray.c,
/* Reverse a bit array */
void bitarray_reverse(bitarray_t *ba, size_t bit_off, size_t bit_len){
size_t tmp;
int i;
for(i = 0; i < bit_len/2; i++){
tmp = bitarray_get(ba, bit_off + i);
bitarray_set(ba, bit_off + i, bitarray_get(ba,bit_off + bit_len - 1 - i));
bitarray_set(ba, bit_off + bit_len - 1 - i, tmp);
}
}
In bitarray.h:
void bitarray_reverse(bitarray_t *ba, size_t bit_off, size_t bit_len);
TIA