Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Vand Proiect AI cu ChatGPT 4(Gene...

E-Mail in serie prin Excel si Out...

Modul alimentare rulou/jaluzea ex...

Recuperare fișiere dupa form...
 Aplicatii stress test RAM

Asigurare auto hibrid

Asus B550M - PC-ul nu porneste di...

Tzanca Uraganu - Inconjurat de Fe...
 explicatie montaj breadboard

3 Doors Down - Kryptonite

Semnalizati cand virati pe un dru...

Succesiune - mostenire apartament...
 Donez Siofor de 1000mg ( diabet t...

Izolatie intre parter si etaj

Hranirea pasarilor din orase -pro...

[unde] goarna tramvai
 

linkare statica libc

- - - - -
  • Please log in to reply
7 replies to this topic

#1
psycho22

psycho22

    Member

  • Grup: Members
  • Posts: 334
  • Înscris: 11.02.2014
Cand compilez un cod care foloseste niste functii din biblioteca standard a lui C, fara sa pun vreun parametru la compilator, legarea se face automat dinamic. Cum pot sa compilez static? Daca vreau ca implementarea functiei sa fie in fisierul meu .exe si nu in msvcrt.dll, cum fac asta? Unde gasesc libc.a?

#2
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003
GCC foloseste -static.
Nu cred ca pe runtime il poti lega asa, msvcrt.dll se afla in orice sistem Windows.

#3
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Daca folosesti Visual Studio:
Attached File  Untitled.png   61.59K   11 downloads

Daca folosesti gcc sub Windows, mi se pare ca nu poti scapa de msvcrt.dll fiindca gcc chiar se bazeaza pe acele functii sa nu mai fie nevoiti ei sa le implementeze.

#4
psycho22

psycho22

    Member

  • Grup: Members
  • Posts: 334
  • Înscris: 11.02.2014

 neagu_laurentiu, on 21 aprilie 2014 - 06:18, said:

GCC foloseste -static.
Nu cred ca pe runtime il poti lega asa, msvcrt.dll se afla in orice sistem Windows.
Nu il pot lega asa pentru ca e biblioteca standard sau pentru ca  GCC nu poate lucra cu DLL-uri in loc de acele biblioteci statice lib****.a? GCC fiind pentru lumea *nix, ma gandesc ca e posibil, avand in vedere ca DLL-urile sunt specifice Windows.

Edited by psycho22, 21 April 2014 - 12:40.


#5
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003
MinGW e similar cu a te scarpina la urechea dreapta cu mana stanga. Sub Unix-like & GCC poti lega static libc cum si VC++ o face pe Windows. Dar in cazul MinGW & msvcrt.dll nu te incurca fiindca e in sistem acel dll.
E un .dll specific GCC-ului portat sub Windows si acesta trebuie legat sau carat dupa tine aici. Mai sunt si libmsvcrtXX.a dar n-am intrat in detalii ca nu ma pasioneaza prea tare:
Link with gcc -static -static-libgcc -static-libstdc++ and you won't need libgcc_s_dw2-1.dll and libstdc++-6.dll

Edited by neagu_laurentiu, 21 April 2014 - 13:01.


#6
psycho22

psycho22

    Member

  • Grup: Members
  • Posts: 334
  • Înscris: 11.02.2014
Am inteles. Multumesc pentru raspunsuri.

Totusi, nu inteleg ceva: acele dll-uri contin cod obiect. O biblioteca statica(lib.a) contine si ea o colectie de coduri obiect. Daca compilatorul are acces la implementarea functiilor (la msvcrt.dll), de ce nu ar putea sa integreze in .exe functiile necesare? Sa deschizi un proces cu o functie din dll si sa te folosesti de el nu e acelasi lucru cu a integra intr-un singur proces functia respectiva (acel .exe fiind procesul)?

Am inteles ca nu pot lega static biblioteca standard cu MinGW, dar avand in vedere ca sunt in perioada de formare, mi-ar prinde bine sa inteleg si de ce nu poate.

#7
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,570
  • Înscris: 30.07.2003
Nu intotdeauna ai cod ci si redirectare la un .so/.dll
E mai avantajos un .so/.dll pentru ca partajeaza acelasi cod la N aplicatii, nu e nevoie ca fiecare sa incarce si ocupa memoria cu aceeasi bucata de cod (am zis cod nu date, acestea din urma sunt locale pt. fiecare proces).

Edited by neagu_laurentiu, 21 April 2014 - 13:09.


#8
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
.lib.a se numeste biblioteca de import. Ea poate contine intreg codul functiilor (biblioteca statica), sau poate avea doar redirectionari spre un .dll/.so (biblioteca dinamica).

Dintr-un .dll/.so nu poti obtine un .lib.a cu intreg codul, ci doar unul care sa redirectioneze inapoi spre acel .dll/.so, doar daca ai codul sursa la dispozitie, iar codul pentru msvcrt.dll nu-i disponibil lui gcc

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate