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

Тема в разделе "WASM.UNIX", создана пользователем samuraishowdown, 20 фев 2012.

  1. samuraishowdown

    samuraishowdown New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2011
    Сообщения:
    70
    компилю файлик такой строкой

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

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

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

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

    samuraishowdown New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2011
    Сообщения:
    70
    -static-libgcc -static-libstdc++ помогло. но не на всех линупсах. а просто -static чё тогда даёт?
     
  3. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Код (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. }
    Код (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)
    Код (Text):
    1. $ g++ -static cout.cpp -lpthread
    2. $ ldd ./a.out
    3.     not a dynamic executable
    По поводу 32/64: в один файл запихнуть не получится -- это будут 2 различные сборки.
     
  4. samuraishowdown

    samuraishowdown New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2011
    Сообщения:
    70
    А всё-таки интересно почему у меня с -static вообще не компилится?
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    и
    Вообще-то у вас все компилится, но не линкуется.