|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
[gcc] linkare librerie
salve, nel mio progetto ho creato 2 librerie, quindi mi ritrovo con questi 4 file:
lib.h lib.c lib2.h lib2.c Ora, come compilo il programma linkando le 2 librerie? Ho cercato un po' su google ma non ho capito bene, se qualcuno me lo spiega in modo chiaro... |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Codice:
gcc -O3 main.c lib.c lib2.c -o myapp Per eseguire il programma appena creato: Codice:
./myapp EDIT: ovviamente il file main.c deve contenere gli include alle due librerie: Codice:
#include "lib.h" #include "lib2.h" Ultima modifica di Vincenzo1968 : 28-01-2013 alle 18:40. |
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Vabbuò se Joker intendeva le librerie a collegamento dinamico o statico non deve fare altro che fare un fischio.
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
libreria a collegamento statico(static Library):
![]() lib1.h: Codice:
#ifndef MY_LIB1_H #define MY_LIB1_H int somma(int x, int y); #endif /* MY_LIB1_H */ Codice:
#include <stdio.h>
#include <stdlib.h>
#include "lib1.h"
int somma(int x, int y)
{
return x + y;
}
Codice:
#ifndef MY_LIB2_H #define MY_LIB2_H int sottrazione(int x, int y); #endif /* MY_LIB2_H */ Codice:
#include <stdio.h>
#include <stdlib.h>
#include "lib2.h"
int sottrazione(int x, int y)
{
return x - y;
}
Codice:
#include <stdio.h>
#include <stdlib.h>
#include "lib1.h"
#include "lib2.h"
int main()
{
int a, b, x, y;
a = 8;
b = 5;
x = somma(a, b);
y = sottrazione( a, b);
printf("\n%d + %d = %d\n", a, b, x);
printf("\n%d - %d = %d\n", a, b, y);
return 0;
}
Ultima modifica di Vincenzo1968 : 28-01-2013 alle 22:56. |
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Libreria a collegamento dinamico(shared library):
![]() lib1.h: Codice:
#ifndef MY_LIB1_H
#define MY_LIB1_H
#if defined _WIN32 || defined __CYGWIN__
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
#else
#if __GNUC__ >= 4
#define MYDLL_API __attribute__ ((visibility ("default")))
#else
#define MYDLL_API
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
MYDLL_API int somma(int x, int y);
#ifdef __cplusplus
}
#endif
#endif /* MY_LIB1_H */
Codice:
#include <stdio.h>
#include <stdlib.h>
#define MYDLL_EXPORTS
#include "lib1.h"
MYDLL_API int somma(int x, int y)
{
return x + y;
}
Codice:
#ifndef MY_LIB2_H
#define MY_LIB2_H
#if defined _WIN32 || defined __CYGWIN__
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
#else
#if __GNUC__ >= 4
#define MYDLL_API __attribute__ ((visibility ("default")))
#else
#define MYDLL_API
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
MYDLL_API int sottrazione(int x, int y);
#ifdef __cplusplus
}
#endif
#endif /* MY_LIB2_H */
Codice:
#include <stdio.h>
#include <stdlib.h>
#define MYDLL_EXPORTS
#include "lib2.h"
MYDLL_API int sottrazione(int x, int y)
{
return x - y;
}
Codice:
#include <stdio.h>
#include <stdlib.h>
#include "lib1.h"
#include "lib2.h"
int main()
{
int a, b, x, y;
a = 8;
b = 5;
x = somma(a, b);
y = sottrazione( a, b);
printf("\n%d + %d = %d\n", a, b, x);
printf("\n%d - %d = %d\n", a, b, y);
return 0;
}
Ultima modifica di Vincenzo1968 : 29-01-2013 alle 12:06. |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
![]()
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
http://gcc.gnu.org/wiki/Visibility
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
grazie, molto esaustivo
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
mi interessava la compilazione, la libreria l'avevo già creata
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 467
|
la libreria non è il file .a?
|
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Quote:
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:08.























