2010-11-17 40 views
0

J'essaie de compiler une source pour Tilera et j'ai eu l'erreur suivante lors de la liaison. Toutes ces erreurs sont liées à C++ STL (Standard Template Library).Tilera cross compilation - erreur de liaison

Existe-t-il une différence dans le processus de liaison d'une bibliothèque STL?

Les erreurs sont:

gtpu_t. a: In function `stlp_std::_Atomic_swap_struct<0>::_S_swap(unsigned int volatile* , unsigned int)': 
91 /u/TILERA/TileraMDE-2.1.1.107611/tilepro/tile/usr/include/cpp/stl/stl/_threads.h :588: undefined reference to `stlp_std::_Atomic_swap_struct<0>::_S_swap_lock' 
92 /u/TILERA/TileraMDE-2.1.1.107611/tilepro/tile/usr/include/cpp/stl/stl/_threads.h :588: undefined reference to `stlp_std::_Atomic_swap_struct<0>::_S_swap_lock' 
93 /u/TILERA/TileraMDE-2.1.1.107611/tilepro/tile/usr/include/cpp/stl/stl/_threads.h :591: undefined reference to `stlp_std::_Atomic_swap_struct<0>::_S_swap_lock' 
94 /u/TILERA/TileraMDE-2.1.1.107611/tilepro/tile/usr/include/cpp/stl/stl/_threads.h :591: undefined reference to `stlp_std::_Atomic_swap_struct<0>::_S_swap_lock' 
95 /u/TILERA/LTESTACK/TILERA/DEV/lte/lte_enb/enb_app/../enb_gtpu/gtpu_t/lib/gtpu_t. a: In function `stlp_std::_Atomic_swap_struct<0>::_S_swap_ptr(void* volatile*, v oid*)': 
96 /u/TILERA/TileraMDE-2.1.1.107611/tilepro/tile/usr/include/cpp/stl/stl/_threads.h :614: undefined reference to `stlp_std::_Atomic_swap_struct<0>::_S_swap_lock' 
97 /u/TILERA/LTESTACK/TILERA/DEV/lte/lte_enb/enb_app/../enb_gtpu/gtpu_t/lib/gtpu_t. a:/u/TILERA/TileraMDE-2.1.1.107611/tilepro/tile/usr/include/cpp/stl/stl/_threads .h:614: more undefined references to `stlp_std::_Atomic_swap_struct<0>::_S_swap_ lock' follow 

Répondre

0

Le "STL" est seulement une partie de votre implémentation C++. Il ne devrait pas être lié spécifiquement, tout comme vous n'avez pas besoin de lier malloc ou new spécifiquement.

0

Si je compile un petit programme qui utilise, qui utilise _S_swap_lock, ça marche pour moi:

$ cat foo.cc 
#include <rope> 
int main(void) 
{ 
    std::crope r(100000, 'x'); 
    std::crope r2 = r + "abc"; 
} 
$ tile-c++ foo.cc 
$ nm -C a.out | grep -i atomic 
0000000000059028 V stlp_std::_Atomic_swap_struct<1>::_S_swap_lock 

C'est le « < 1> » saveur, pour Atomics 32 bits, ce qui semble être communément utilisé. Je ne vois pas la saveur < 0> dans libsupC++. Je suppose que vous devrez poster un code qui reproduit le problème.

+0

Salut Chris, Le fichier _threads.h de nous contient 2 définitions de _Atomic_swap_struct donc, Peut partager le fichier _threads.h avec nous. – arun

1

Je pense que cela aidera. J'ai essayé de compiler avec Tilera avant et j'ai eu des erreurs similaires, "référence non définie à". La solution consistait à inclure la bibliothèque dans les propriétés du projet.

Cliquez sur les paramètres de votre projet, allez à chemins et symboles, et sous: la bibliothèque de l'stlp_std::_Atomic_swap_struct<0>::_S_swap_lock est définie dans.

Notez également que Tilera IDE (Eclipse) est muet. Définir le chemin de votre bibliothèque de tuiles ne fonctionnera pas! Il suffit de taper le nom de la bibliothèque. (Étant donné que vous avez correctement configuré vos variables IDE). Si vous utilisez des lignes de commande, comprennent la bibliothèque en ajoutant simplement l'argument
-lMyLibrary

Voici un exemple:
Dans les bibliothèques il y a:

tmc 
pthread 

Je suppose que vous développez sous Linux