代码之家  ›  专栏  ›  技术社区  ›  unsorted

未定义符号

c
  •  1
  • unsorted  · 技术社区  · 14 年前

    我得到一个 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
    

    在试验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);
    

    短暂性脑缺血发作

    1 回复  |  直到 14 年前
        1
  •  1
  •   t0mm13b    14 年前

    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
    

    是什么 _harvey 指的是什么?