Linux: Cum fac...?

Discussion in 'Ajutor: Software și sisteme de operare' started by war4peace, Jan 7, 2006.

  1. Marius '95

    Marius '95 Membru Senior Sugar daddy

    Compilez un program. La sfarsit ar trebui sa fac un make install, dar as vrea sa salvez ce instaleaza pentru un alt sistem. Cum fac ca acel make install sa imi arate ce fisiere a instalat si unde, sau, mai bine, cum fac sa se "instaleze" intr-un director gol?

    PS: Se presupune ca Makefile n-are optiunile astea.
    PS2: Nu stiu sa editez Makefile.
    PS3: Daca va ganditi la chroot, imi trebuie indicatii ca pentru mamaie, ca n-am mai facut pana acum.
     
    Last edited: Mar 10, 2018
  2. miahi

    miahi Wizzard Sugar daddy

    Make install poate să facă absolut orice în spate, de la copiat "simplu" la rulat un alt script care face asta. Vezi dacă te ajută make -d, altfel... strace (cu trace=open,close), auditctl și alte chestii mai complicate (loggedfs). Da, sintaxa makefile e dubioasă și unii le fac super write-only, de nu mai înțelegi nimic, dar până la urmă tot aia e mai simplu :smile:.
     
  3. Quark

    Quark zis şi Brucan Sugar daddy

    Rog sa-i baneze cineva pe ^ pana luni dimineata.
     
  4. Marius '95

    Marius '95 Membru Senior Sugar daddy

    make -d merge. Noroc ca sunt doar 4 fisiere. Le-am cules manual de pe unde le-a aruncat.
    Alta:
    Compilez libtommath in Slackware 64bit. Imi rezulta libtommath.a in /usr/local/lib/ si nimic in /usr/local/lib64/
    Sa inteleg ca acel libtommath.a este 32bit? Cum fac sa obtin 64bit?

    Bah! Luni ma duc la serviciu! Cine mai are timp de Slackware? Slackware e exclusiv de weekend. :wink:
     
  5. miahi

    miahi Wizzard Sugar daddy

    Vezi
    Code:
    objdump -f libtommath.a | grep ^architecture
    pentru 32/64 bit.

    Make compilează fără să se uite, pentru că ar trebui să configurezi tu gcc cum îți place (dacă biblioteca n-are un config al ei). By default pe o arhitectură 64-bit gcc ar trebui să aibă -m64 deja setat. Dacă ție-ți generează 32-bit pe o mașină 64-bit e cam ciudat, dar locul unde îl pune nu garantează că e 32-bit. Anyway, poți forța -m64 cu CFLAGS dacă e nevoie.
     
  6. Marius '95

    Marius '95 Membru Senior Sugar daddy

    architecture: i386:x86-64. Ce sa inteleg? i386 sau x86-64?

    Intre timp m-am apucat de altceva: sa compilez Firebird pe OpenWRT.
    Am inceput direct cu ultimul alfa de pe site, ca are libtommath inclus si nu ma mai chinui. Culmea, pe Slackware pare sa mearga din prima! Am si reusit sa creez o baza de date si sa ma conectez la ea.
    Da' pe OpenWRT nu vrea, ca OpenWRT n-are libicu-devel. Asadar, am purces la downloadat icu4c v60.2 de la mama lui.
    Configurat - OK
    Compilat - OK
    Instalat - evident in directorul gresit, dar OK, l-am mutat din /usr/local in /usr
    Apoi incerc ./configure la Firebird si nu merge. La sapatul prin log-uri rezulta chestiunea asta:
    Code:
    configure:19252: checking for main in -licuuc
    configure:19271: gcc -o conftest     conftest.c -licuuc    >&5
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `__dynamic_cast@CXXABI_1.3'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `operator delete(void*)@GLIBCXX_3.4'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `__gxx_personality_v0@CXXABI_1.3'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `vtable for __cxxabiv1::__class_type_info@CXXABI_1.3'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `vtable for __cxxabiv1::__si_class_type_info@CXXABI_1.3'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info@CXXABI_1.3'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `__cxa_pure_virtual@CXXABI_1.3'
    /usr/lib/gcc/i486-openwrt-linux-musl/5.4.0/../../../libicuuc.so: undefined reference to `__cxa_call_unexpected@CXXABI_1.3'
    collect2: error: ld returned 1 exit status
    
    Deci ce naiba s-a intamplat aici?
     
  7. miahi

    miahi Wizzard Sugar daddy

    i386:x86-64 e versiunea pe 64 bit.

    /usr/local este directorul corect pentru aplicații instalate de utilizatori. /usr e pentru chestii care sunt instalate din pachete de OS. Diferențierea se face în primul rând ca să nu bușești chestii sistem cu lucruri prost compilate/linkate, cum se întâmplă cu firebird-ul ăla (pare dubioasă calea aia către lib).
     
  8. Marius '95

    Marius '95 Membru Senior Sugar daddy

    1) OK. Deci "libicuuc.so: undefined reference to X" inseamna ca X lipseste din libicuuc.so sau din libc/uclibc?

    2) Exista undeva un motor de cautare unde sa introduc PCI ID si sa imi zica ce module din kernel imi trebuie pentru acel device?
    PS: am rulat deja lspci -k dar nu prea m-am lamurit prin anumite locuri.
     
    Last edited: Mar 12, 2018
  9. miahi

    miahi Wizzard Sugar daddy

    1) ție-ți trebuie libstdc++ acolo

    2) no idea
     
  10. Marius '95

    Marius '95 Membru Senior Sugar daddy

    1) Detaliaza, te rog, ca nu prea am priceput ce a facut make acolo. Teoretic, n-am libstdc++ in sistem. Make ar fi trebuit sa foloseasca uclibc cand am compilat ICU. Cum aflu ce a folosit?

    2) https://cateee.net/autokernconf/ dar e cam primitiv si lipsesc devices.
     
  11. miahi

    miahi Wizzard Sugar daddy

    Codul de aici e clar c++, n-am idee ce s-a compilat și cum. Cu objdump -p poți vedea lista de biblioteci necesare (cu grep pe NEEDED dacă-s multe, iar la version references îți zice și cam ce versiuni se așteaptă).
     
  12. Marius '95

    Marius '95 Membru Senior Sugar daddy

    1) Faceam confuzie intre c si c++; nu mi-am dat seama ca sunt biblioteci diferite.
    Deci am instalat libstdc++. Eroarea persista. Este ceva ciudat ca nu da eroare ca nu gaseste biblioteca ci anumite functii din ea. Sau asa sunt erorile in linux?
    Code:
    root@LEDE:/usr/lib# objdump -p libicuuc.so
    
    libicuuc.so:     file format elf32-i386
    
    Program Header:
        LOAD off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
             filesz 0x001d5bfd memsz 0x001d5bfd flags r-x
        LOAD off    0x001d6bd0 vaddr 0x001d7bd0 paddr 0x001d7bd0 align 2**12
             filesz 0x0000a56c memsz 0x0000bcb8 flags rw-
     DYNAMIC off    0x001e0e9c vaddr 0x001e1e9c paddr 0x001e1e9c align 2**2
             filesz 0x000000e8 memsz 0x000000e8 flags rw-
    EH_FRAME off    0x0018c708 vaddr 0x0018c708 paddr 0x0018c708 align 2**2
             filesz 0x000065ec memsz 0x000065ec flags r--
       STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
             filesz 0x00000000 memsz 0x00000000 flags rw-
       RELRO off    0x001d6bd0 vaddr 0x001d7bd0 paddr 0x001d7bd0 align 2**0
             filesz 0x0000a430 memsz 0x0000a430 flags r--
    
    Dynamic Section:
      NEEDED               libicudata.so.60
      NEEDED               libstdc++.so.6
      NEEDED               libgcc_s.so.1
      NEEDED               libc.so
      SONAME               libicuuc.so.60
      SYMBOLIC             0x00000000
      INIT                 0x00042978
      FINI                 0x001431fa
      HASH                 0x000000f4
      STRTAB               0x0001344c
      SYMTAB               0x0000581c
      STRSZ                0x00022813
      SYMENT               0x00000010
      PLTGOT               0x001e2000
      PLTRELSZ             0x00000220
      PLTREL               0x00000011
      JMPREL               0x00042758
      REL                  0x00037858
      RELSZ                0x0000af00
      RELENT               0x00000008
      VERNEED              0x000377e8
      VERNEEDNUM           0x00000002
      VERSYM               0x00035c60
      RELCOUNT             0x000014c4
    
    Version References:
      required from libstdc++.so.6:
        0x056bafd3 0x00 05 CXXABI_1.3
        0x0bafd178 0x00 04 CXXABI_1.3.8
        0x08922974 0x00 03 GLIBCXX_3.4
      required from libgcc_s.so.1:
        0x0d696910 0x00 06 GLIBC_2.0
        0x0b792650 0x00 02 GCC_3.0
    
    root@LEDE:/usr/lib# ls -l | egrep "libu|libstd"
    lrwxrwxrwx    1 root     root            19 Feb 21 20:12 libstdc++.so.6 -> libstdc++.so.6.0.21
    -rwxr-xr-x    1 root     root       1110467 Oct 18 08:54 libstdc++.so.6.0.21
    -rw-r--r--    1 root     root          2644 Oct 18 08:54 libstdc++.so.6.0.21-gdb.py
    -rwxr-xr-x    1 root     root        167939 Dec 24 14:05 libuClibc++-0.2.4.so
    lrwxrwxrwx    1 root     root            20 Mar 12 21:36 libuClibc++.so.0 -> libuClibc++-0.2.4.so
    
     
  13. miahi

    miahi Wizzard Sugar daddy

    Păi eu nu prea înțeleg cum s-a compilat, neavând biblioteca să linkeze corect.
     
  14. Marius '95

    Marius '95 Membru Senior Sugar daddy

    Mda. Buna intrebare. Dar chiar are nevoie de bibilioteca propriu-zisa sau doar de headere?

    In sfarsit, am constatat ca pot instala pachetul ICU de la LEDE si headerele aceleiasi versiuni (58) de pe subversion. Si cu combinatia asta, trece de ICU.

    LE:
    Nu merge. Am dat peste alte doua erori obscure si nici macar n-am ajuns la compilare.

    Varianta 1: Mai incerc OpenWRT + Firebird
    Avantaje: Un SO usor administrabil de la distanta si o baza de date mai obscura si mai putin predispusa la a fi atacata de boti.
    Dezavantaje: Nu merge!

    Varianta 2: OpenWRT + MySQL
    Avantaje: SO usor administrabil, baza de date gata de lucru (sper).
    Dezavantaje: 2 zile de munca la modificat programul, diverse probleme cu mysql care vor aparea inevitabil, probleme de compatibilitate la fiecare update viitor.

    Varianta 3: Slackware + Firebird
    Avantaje: Stiu deja ca merge si imi place. Inca are init! :biggrin: Posibil compatibilitate mai buna pentru x86-64, power management, driveri, hdd, etc. Invat ceva nou.
    Dezavantaje: Administrarea e criminala comparativ cu OpenWRT si e posibil sa fac gafe de securitate majore.

    Voi ce ati alege?
     
  15. miahi

    miahi Wizzard Sugar daddy

    Fain cum reușești tu să alegi întotdeauna cele mai dubioase metode de a rezolva o problemă :smile:.

    De când am citit post-ul tău am downloadat și instalat un OS (linux mint) și am instalat Firebird în el.

    fireb.png

    Da, dacă stai să compilezi tu și să folosești OS-uri făcute pentru cu totul altceva, da, o să ai probleme unice, pe care trebuie să ți le rezolvi.
     
    Styr likes this.
  16. Quark

    Quark zis şi Brucan Sugar daddy

    Meh, nu toata lumea are creier pozitronic, ca tine. :biggrin:
     
    ipman likes this.
  17. IceCub

    IceCub Membru Senior Sugar daddy

    Eu încă încerc sa înțeleg logica din a instala o aplicație de baze de date pe un OpenWRT. :what:
    Acu dacă îmi spune ca acel OpenWRT e instalat pe un router, chiar ma da pe spate.
     
  18. Marius '95

    Marius '95 Membru Senior Sugar daddy

    Nu. E pe un mini-PC cu i5-4200U, forever headless, ca n-are decat HDMI. Logica, asa cum am zis mai sus, e ca OpenWRT este simplu de administrat remote, iar LUCI (interfata web din OpenWRT) nu merge pe altceva.

    Sa inteleg ca toata lumea sustine varianta Slackware?
     
  19. puterfixer

    puterfixer Administrator Sugar daddy

    Interfața de administrare facilă este pentru 1) noobi care altfel n-ar cumpăra produsul (gen, router sau alt fel de appliance care necesită cel puțin un first-time config), sau 2) cazurile în care activitatea de administrare/monitorizare este o chestie foaaaaarte frecventă. Mă cam îndoiesc că sistemul ăsta bifează vreuna dintre opțiuni.

    Mă bucur că Slackware mai există, era miez acu' 20 de ani când încă se scria în Chip despre el. Io în locul tău m-aș băga pe care distribuție linux e mai bine întreținută, ca să am actualizări foarte recente și informații gârlă. De exemplu, un CentOS 7 minimal install + un tutorial bun de server hardening, și pe care să intru o dată pe lună prin SSH să verific jurnale și să dau un yum update. CentOS e suficient de prietenos cu începătorii, suficient de răspândit în lumea serverelor ca să ai instrucțiuni pe partea de securitate/configurare/performanță etc., suficient de bine suportat de RedHat pentru ca să ai ceva garanții de responsabilitate la calitate.

    Iar peste ăsta aș pune un MariaDB cu phpMyAdmin dacă chiar vreau neapărat interfață de administrare la baza de date.

    Apoi aș face cel puțin un sistem paralel pentru dezvoltare și testare, cât mai apropiat ca și configurare - poate fi mașină virtuală pe alt PC, n-are importanță, doar să nu trebuiască să faci dezvoltare și experimente pe sistemul de producție.
     
    Last edited: Mar 14, 2018
    IceCub and miahi like this.
  20. IceCub

    IceCub Membru Senior Sugar daddy

    Dude, dafuq?! Ai ajuns sa compilezi aplicatii din sursa si te plangi de administrare?
    Pune in puii mei o distributie serioasa (Debian/Ububtu/CentOS/Slack) cu manager de pachete + MySQL/MariaDB+ PHP + PhpMyAdmin. Pentru administrare din web exista Webmin (nu l-am mai folosit de ~ 10 ani asa ca nu pot sa-ti spun cum e) sau daca chiar te consideri n00b, pune o interfata grafica + xrdp.
    In timpul pe care l-ai pierdut compiland diverse, faceai toate astea lejer. Gandeste-te ca la orice problema aparuta gasesti tone de documentatie/posturi simulare pe net.
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice