Jak naprawić błędy architektury x86_64?

głosy
0

Biegnę omnet ++ 4.6 do około 6months teraz. Kiedy próbowałem budowania mojego projektu po kilku zmianach:

  • usunięcie pliku nagłówkowego z projektu
  • dodanie większej ilości plików do folderu My obejmuje

I ten błąd

Creating shared library: ../out/gcc-debug/src/libinet.dylib
    Undefined symbols for architecture x86_64:
      BloomFilter::BloomFilter(unsigned long, int, unsigned long, ...), referenced from:
          AODVRouting::AODVRouting() in AODVRouting.o
          AODVRouting::AODVRouting() in AODVRouting.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [../out/gcc-debug/src/libinet.dylib] Error 1
    make: *** [all] Error 2

Mój projekt wykorzystane do budowy i uruchomienia w porządku przed tym.

Jest to .ccplik:

    #include BloomFilter.h
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <cstdarg>
#include <exception>
#include <stdio.h>
#include <string.h>

using namespace std;


#define SETBIT(a, n) (a[n/CHAR_BIT] |= (1<<(n%CHAR_BIT)))
#define GETBIT(a, n) (a[n/CHAR_BIT] & (1<<(n%CHAR_BIT)))


// The Constructor
BloomFilter::BloomFilter(size_t size,int hash_k, size_t nfuncs, ...) {


          va_list l;
          unsigned int n;

          try {
            this->a=new char[(size+CHAR_BIT-1)/CHAR_BIT];
          }
          catch(const std::exception& e)
          {
              // If we get here is that there is an allocation error .
              // We must free the memory .
            delete(this);
            // std :: cerr << ERROR:  << e.what () << endl;
            // Then raise the exception to indicate that an error occurred.
            throw;
          }


          try {
                  this->funcs= new hashfunc_t[nfuncs];
                  }
          catch(const std::exception& e){
            delete(this->a);
            delete(this);
              }

          va_start(l, nfuncs);
          for(n=0; n < nfuncs; ++n) {
            this->funcs[n]=va_arg(l, hashfunc_t);
          }
          va_end(l);

          this->nfuncs=nfuncs;
          this->asize=size;
          this->hash_k=hash_k;

}

// The Destructor
BloomFilter::~BloomFilter() {
        /*
        delete(this->a);
          delete(this->funcs);
          delete(this);
          */
}

int BloomFilter::AddToBloom(std::string word){
    char t= '1';
    int AddFlag;    // to know if the element is added successfully
    for(int i=0;i<this->hash_k;i++){
        AddFlag=Add(word += t);
                t++;
    }
    return AddFlag;
}


int BloomFilter::Add(std::string word){
        size_t size = word.size() + 1;
        char * buffer = new char[ size ];
        strncpy( buffer, word.c_str(), size );

        return Add(buffer);
}

int BloomFilter::Add(const char *s)
{
  size_t n;

  for(n=0; n<this->nfuncs; ++n) {
    SETBIT(this->a, this->funcs[n](s)%this->asize);
  }

  return 0;
}

int BloomFilter::CheckBloom( std::string word){

    int CheckFlag;
    char t= '1';
        for(int i=0;i<this->hash_k;i++){
            if(!Check(word += t)) return 0;
                    t++;
        }
        return 1;


}
int BloomFilter::Check(std::string word){
        size_t size = word.size() + 1;
        char * buffer = new char[ size ];
        strncpy( buffer, word.c_str(), size );

        return Check(buffer);
}

int BloomFilter::Check(const char *s)
{
  size_t n;

  for(n=0; n< this->nfuncs; ++n) {
    if(!(GETBIT(this->a, this->funcs[n](s)%this->asize))) return 0;
  }

  return 1;
}

//Print information about this object
void BloomFilter::toString(){
        /*EV << [BloomFilter] Hello, I am ready ?  << ready
        << ; max entry : << maxEntry << endl;*/
}

Co się naprawić tego błędu?

Utwórz 17/10/2015 o 11:35
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

To łącznik, a nie kompilator C ++ błąd. Prawdopodobnie będziesz musiał dodać plik .o generowane .cc złożyć do listy obiektów, które się ze sobą związane, tworząc libinet.dylib

Odpowiedział 17/10/2015 o 11:37
źródło użytkownik

głosy
0

Pozbyłem się tego błędu po skopiowaniu plików .cci .hod mojego projektu głównego do projektu pracuję nad (w określonym katalogu). Zrobiłem to podczas biegu omnet ++ oraz w przeglądarce projektów.

Nie jestem pewien, jaki to ma związek z „łącznikiem” problem, ale na pewno rozwiązać kopalni.

Odpowiedział 17/10/2015 o 14:05
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more