簡體   English   中英

在 aarch64 中使用 pthread 編譯時出現 ld 錯誤

[英]ld error while compiling with pthread in aarch64

我正在嘗試使用基於 aarch64 的 linux 主機上的線程來編譯和鏈接一個簡單的 C++ 程序。 簡單的程序如下:

#include <iostream>
#include <thread>
#include <atomic>

using namespace std;

#define ITERATIONS 1000

// to be called for multi threaded execution
void increment_atomic_thread (atomic<int>& a)
{
    for (int i = 0; i < ITERATIONS; i++)
    {
        a++;
    }
}

int main (int argc, char* argv[])
{ 
    atomic<int> a, b, c, d;

    thread t1 ( [&]() { increment_atomic_thread(a); } );
    thread t2 ( [&]() { increment_atomic_thread(b); } );
    thread t3 ( [&]() { increment_atomic_thread(c); } );
    thread t4 ( [&]() { increment_atomic_thread(d); } );

    t1.join();
    t2.join();
    t3.join();
    t4.join();

    return 0;
}

這段代碼在 x86-64 機器上編譯得很好,但是我在 aarch64 機器中得到一個 ld 錯誤,如下所示(output 是使用 --verbose 編譯時的最后幾行):

attempt to open /usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/crtn.o succeeded
/usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/crtn.o
libm.so.6 needed by /usr/lib/gcc/aarch64-linux-gnu/7/libstdc++.so
found libm.so at /usr/lib/gcc/aarch64-linux-gnu/7/../../../aarch64-linux-gnu/libm.so
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libpthread.a(pthread_create.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `__stack_chk_guard@@GLIBC_2.17' which may bind externally can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libpthread.a(pthread_create.o)(.text+0x9cc): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `__stack_chk_guard@@GLIBC_2.17'
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

編譯命令為:

g++ -g -std=c++17 -lpthread -Xlinker --verbose -o pthread_basic.app pthread_basic.cpp /usr/lib/aarch64-linux-gnu/libpthread.a

謝謝@Some程序員老兄。 在這里粘貼他的評論

您不需要-lpthread/usr/lib/aarch64-linux-gnu/libpthread.a 刪除最后一個並保留-lpthread但將其放在命令行的末尾(庫的順序很重要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM