Sono il seguente errore di compilazione quando si tenta di utilizzare il metodo is_lock_free() di atomica.mingw-4.8.1 questione atomica
struct Simple1 { int i; };
struct Simple2 { int a; int b; };
struct Simple3 { int a; int b; int c; };
int main()
{
atomic<Counter> counter;
atomic<Param> param;
atomic<Simple1> s1;
atomic<Simple2> s2;
atomic<Simple3> s3;
cout
<< "Is s1 lock free? " << boolalpha << s1.is_lock_free() << '\n'
<< "Is s2 lock free? " << boolalpha << s2.is_lock_free() << '\n'
<< "Is s3 lock free? " << boolalpha << s3.is_lock_free() << '\n';
}
s1.is_lock_free() and s2.is_lock_free()
sono a posto e atomic<builtin>::is_lock_free()
, dove builtin
è un tipo fondamental, funziona bene.
Ma per s3 la chiamata di is_lock_free
dà un errore di collegamento: undefined reference to __atomic_is_lock_free
non ho bisogno di un po 'di collegare libreria esterna? Cosa posso fare?
Edit 1
Lo stesso problema si verifica su gcc4.8.1 su Ubuntu 13.04
L'opzione linea di comando è la seguente:
g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -o "atomic_test.o" "atomic_test.cpp"
g++ -std=c++11 -o hello.exe atomic_test.o
Edit 2
Ho aggiunto -latomic e -lpthread su gcc, ma ho lo stesso errore:
04:09:37: Running steps for project atomic...
04:09:37: Configuration unchanged, skipping qmake step.
04:09:37: Starting: "/usr/bin/make"
/home/dmdtek/Qt/5.1.0/gcc_64/bin/qmake -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug -o Makefile ../atomic/atomic.pro
g++ -latomic -lpthread -Wl,-rpath,/home/dmdtek/Qt/5.1.0/gcc_64 -o atomic main.o
main.o: In function `std::atomic<Simple3>::is_lock_free() const':
/usr/include/c++/4.8/atomic:191: undefined reference to `__atomic_is_lock_free'
main.o: In function `std::atomic<long double>::is_lock_free() const':
/usr/include/c++/4.8/atomic:191: undefined reference to `__atomic_is_lock_free'
collect2: error: ld returned 1 exit status
make: *** [atomic] Error 1
04:09:37: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project atomic (kit: Desktop Qt 5.1.0 GCC 64bit)
When executing step 'Make'
04:09:37: Elapsed time: 00:00.
libatomic è presente sul mio sistema:
$ ldconfig -v | grep atomic
/sbin/ldconfig.real: Path `/lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: Path `/usr/lib/x86_64-linux-gnu' given more than once
libatomic.so.1 -> libatomic.so.1.0.0
/sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied
ancora non funziona –
Può essere colpa mia: provare a spostare il '-latomic' prima del' .o' sulla riga di comando e fatemi sapere se funziona in modo che io possa aggiornare la mia risposta. – syam
no stesso risultato: 'g ++ -c -pipe -std = C++ 11 -lpthread -g -Wall -W -fPIE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -I ../../../../ Qt/5.1. 0/gcc_64/mkspecs/linux-g ++ -I ../ atomic -I. -o main.o ../ atomica/main.cpp' 'g ++ -latomic -lpthread -Wl, -rpath,/home/dmdtek/Qt/5.1.0/gcc_64 -o main.o atomica' Sono –