32-bit builds?

Mark Brethen mark.brethen at gmail.com
Thu Nov 26 19:37:10 PST 2015


> On Nov 26, 2015, at 4:51 PM, Ryan Schmidt <ryandesign at macports.org> wrote:
> 
> 
> On Nov 26, 2015, at 9:03 AM, Mark Brethen wrote:
> 
>> The error message:
>> 
>> :info:build ld: symbol(s) not found for architecture x86_64
>> :info:build clang: error: linker command failed with exit code 1 (use -v to see invocation)
>> :info:build make[1]: *** [astgen] Error 1
>> 
>> says "symbol(s) not found for architecture x86_64" instead of "symbol(s) not found for architecture i386”. Can I tweak my build settings to allow a 32-bit build?
> 
> This error message means you are building for x86_64, and the symbols were not found for that architecture. It does not make any statement as to whether the symbols would be found for any other architecture nor whether the software supports or does not support x86_64. It might mean you forgot to specify the name of the library in which the symbols are found, or it could indicate a libc++/libstdc++ incompatibility. Or it could mean there is an architecture mismatch between the program and the library it's using, but since Macs have been x86_64 for many years that's not the first place I'd look.
> 
> 

The last update of elkhound by the original developer was in 2006. Since then, there have been a few updates by other parties. I think the one I was using has some issues. I tried building another today that is bundled with oink-stack (https://github.com/dsw/oink-stack). This one was updated in june and gets to the last build phase with these errors:

:info:build /usr/bin/clang++ -o elkhound -DGRAMANL_MAIN -g -Wall -Wno-deprecated -D__UNIX__ -O2 -DNDEBUG -I. -I../smbase -I../ast -Ic -fno-strict-aliasing gramanl.cc gramexpl.o asockind.o grammar.o emitcode.o mlsstr.o genml.o gramast.ast.gen.o gramlex.yy.o grampar.o grampar.tab.o parsetables.o -g -Wall -Werror ../ast/libast.a ../smbase/libsmbase.a
:info:build In file included from gramanl.cc:4:
:info:build In file included from ./gramanl.h:20:
:info:build ./grammar.h:197:18: error: 'Terminal::toString' hides overloaded virtual function [-Werror,-Woverloaded-virtual]
:info:build   virtual string toString(bool quoteAliases = false) const;
:info:build                  ^
:info:build ./grammar.h:124:18: note: hidden overloaded virtual function 'Symbol::toString' declared here: different number of parameters (0 vs 1)
:info:build   virtual string toString() const { return string(name); }
:info:build                  ^
:info:build ./grammar.h:299:16: error: 'Nonterminal::print' hides overloaded virtual function [-Werror,-Woverloaded-virtual]
:info:build   virtual void print(std::ostream &os, Grammar const *grammer = NULL) const;
:info:build                ^
:info:build ./grammar.h:115:16: note: hidden overloaded virtual function 'Symbol::print' declared here: different number of parameters (1 vs 2)
:info:build   virtual void print(std::ostream &os) const;
:info:build                ^
:info:build 2 errors generated.
:info:build make[1]: *** [elkhound] Error 1

In the definition of the Terminal and Nonterminal classes below, I can add declarations to make the functions from Symbol visible: 'using Symbol::toString’ and 'using Symbol::print’ , right?

class Terminal : public Symbol {
// -------- representation ---------
public:     // data

  LocString alias;

  int precedence;

  AssocKind associativity;

  StringRef classifyParam;      // name of parameter to 'classify'
  LocString classifyCode;       // code to reclassify a token type

// ------ annotation ------
public:     // data
  // terminal class index - this terminal's id; -1 means unassigned
  int termIndex;

protected:  // funcs  
  virtual void internalPrintDDM(std::ostream &os) const;

public:     // funcs
  Terminal(LocString const &name)        // canonical name for terminal class
    : Symbol(name, true /*terminal*/),
      alias(),
      precedence(0),
      associativity(AK_NONASSOC),
      classifyParam(NULL),
      termIndex(-1)
  {}

  Terminal(Flatten &flat);
  void xfer(Flatten &flat);

  virtual void print(std::ostream &os) const;
  OSTREAM_OPERATOR(Terminal)

  virtual bool anyDDM() const;

  // return alias if defined, name otherwise
  virtual string toString(bool quoteAliases = false) const;
};


class Nonterminal : public Symbol {
// ---------- representation --------
public:
  StringRef mergeParam1;    // param name for first alternative
  StringRef mergeParam2;    // and 2nd alt
  LocString mergeCode;      // code to resolve then

  StringRef keepParam;      // name of parameter to 'keep'
  LocString keepCode;       // code to decide whether to keep a reduction

  bool maximal;             // if true, use maximal munch disambiguation
  
  SObjList<Nonterminal> subsets;      // preferred subsets (for scannerless)

protected:  // funcs
  virtual void internalPrintDDM(std::ostream &os) const;

public:     // funcs
  Nonterminal(LocString const &name, bool isEmptyString=false);
  virtual ~Nonterminal();

  Nonterminal(Flatten &flat);
  void xfer(Flatten &flat);
  void xferSerfs(Flatten &flat, Grammar &g);

  virtual void print(std::ostream &os, Grammar const *grammer = NULL) const;
  OSTREAM_OPERATOR(Nonterminal)

  virtual bool anyDDM() const;



Mark






More information about the macports-dev mailing list