как скомпилить без зависимостей

Discussion in 'WASM.UNIX' started by samuraishowdown, Feb 20, 2012.

  1. samuraishowdown

    samuraishowdown New Member

    Blog Posts:
    0
    Joined:
    Mar 6, 2011
    Messages:
    70
    компилю файлик такой строкой

    g++ -g -rdynamic -D_REENTERANT -lpthread prog.cpp

    на других тачках не запускается. Пишет что проблемы с libstdc++. Ну это понятно.
    Как от проблемы избавиться?

    если в строку компиляции дописываю -static, пишет: undefined reference to 'pthread_create'

    Это вообще возможно - сделать переносимый исполняемый файлик, чтоб на разных сборках, версиях ядра,
    x32/x64 работало одинаково или это фантастика?
     
  2. samuraishowdown

    samuraishowdown New Member

    Blog Posts:
    0
    Joined:
    Mar 6, 2011
    Messages:
    70
    -static-libgcc -static-libstdc++ помогло. но не на всех линупсах. а просто -static чё тогда даёт?
     
  3. 7mm

    7mm New Member

    Blog Posts:
    0
    Joined:
    Dec 15, 2009
    Messages:
    442
    Code (Text):
    1. #include <stdio.h>
    2. #include <pthread.h>
    3.  
    4. #include <iostream>
    5.  
    6. void * run(void * data)
    7. {
    8.     std::cout << "thread" << std::endl;
    9. }
    10.  
    11. int main()
    12. {
    13.     pthread_t thread;
    14.     pthread_create(&thread, 0, &run, 0);
    15.     getchar();
    16.     return 0;
    17. }
    Code (Text):
    1. $ g++ cout.cpp -lpthread
    2. $ ldd ./a.out
    3.     linux-vdso.so.1 =>  (0x00007ffffc5ff000)
    4.     libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa30f270000)
    5.     libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa30ef69000)
    6.     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa30ebc9000)
    7.     /lib64/ld-linux-x86-64.so.2 (0x00007fa30f49f000)
    8.     libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa30e945000)
    9.     libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa30e72f000)
    Code (Text):
    1. $ g++ -static cout.cpp -lpthread
    2. $ ldd ./a.out
    3.     not a dynamic executable
    По поводу 32/64: в один файл запихнуть не получится -- это будут 2 различные сборки.
     
  4. samuraishowdown

    samuraishowdown New Member

    Blog Posts:
    0
    Joined:
    Mar 6, 2011
    Messages:
    70
    А всё-таки интересно почему у меня с -static вообще не компилится?
     
  5. valterg

    valterg Active Member

    Blog Posts:
    0
    Joined:
    Aug 19, 2004
    Messages:
    2,105
    и
    Вообще-то у вас все компилится, но не линкуется.