未定义的符号

时间:2010-09-18 13:32:44

标签: c

我收到undefined symbol错误,即使我认为我已经定义好了。从阅读其他帖子和谷歌搜索,似乎链接器未能找到合适的符号。我是C的新手所以我确定我只是错过了一些愚蠢的东西。

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

在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!
};

在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);
    }
}

在bitarray.h中:

void bitarray_reverse(bitarray_t *ba, size_t bit_off, size_t bit_len);

TIA

1 个答案:

答案 0 :(得分:1)

bitarray.o编译成目标文件everybit 但是此行中有 无参考 {{1因此未定义的符号......

everybit

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 指的是什么?

相关问题