LGPL, .lib, .dll e linking

6

Sto cercando di creare un progetto che utilizza una copia non modificata di libconfig ( link ). libconfig è LGPL, ma non voglio open source nessuno del mio codice. Secondo la mia comprensione, LGPL significa che ho bisogno di fornire il codice sorgente per la libreria (facile), e un mezzo per usare la loro versione modificata della libreria . È l'ultimo componente che mi confonde un po '(scusate per qualche ingenuità).

Attualmente, la mia soluzione VS2010 ha il mio progetto e il progetto libconfig. Il progetto libconfig costruisce una dll, ma ho anche bisogno di collegare il mio progetto contro il .lib di libconfig per ottenere le definizioni della DLL (qualcuno può spiegare perché è necessario, quando sto già includendo il file di intestazione?). Nonostante il collegamento, il file .dll deve essere presente al runtime affinché il file binario sia in grado di eseguire

Devo fornire tutti i file .obj e .lib che produco per soddisfare la LGPL? C'è un modo per evitare il collegamento del file .lib? Ho esaminato LoadLibary e GetProcAddress ma sembra molto più complicato di quanto vorrei.

O sto semplicemente sovrastimando i requisiti della LGPL qui?

Se esiste un'altra libreria di configurazione permissiva per c ++, ciò risolverà anche il mio dilemma. Ma non sono stato in grado di trovare qualcosa (e vorrei evitare di aumentare).

    
posta user2093082 27.03.2013 - 18:41
fonte

2 risposte

8

In questo contesto, "significa che per loro utilizza la propria versione modificata della libreria" consente agli utenti di utilizzare il proprio libconfig.dll anziché il proprio se lo desiderano. Rendendolo collegato dinamicamente hai soddisfatto questo requisito. Possono solo sostituire il file. Se invece lo avevi collegato staticamente, dove non hai bisogno di libconfig.dll per essere eseguito, dovresti anche fornire i tuoi file oggetto e creare script.

    
risposta data 27.03.2013 - 19:01
fonte
2

The libconfig project builds a dll, but I also need to link my project against the .lib of libconfig to get the dll's definitions (Can someone explain why this is necessary, when I'm already including the header file?).

Per dirla semplicemente, il file di intestazione ti fornisce una guida come chiamare le funzioni dalla libreria, cioè qual è il nome della funzione, quali parametri accetta, qual è la chiamata convenzione, che cos'è il tipo di ritorno. D'altra parte, il file Lib fornisce al compilatore una guida dove trovare la funzione, cioè è nella libreria libconfig.dll all'indirizzo relativo 0x123456 (o qualunque sia l'indirizzo relativo della funzione), quindi quel compilatore può generare codice per il binding alla funzione.

Is there a way to avoid the linking of the .lib file?

Sì, è possibile caricare dinamicamente la DLL utilizzando LoadLibrary e quindi trovare l'indirizzo della funzione utilizzando GetProcAddress con il nome della funzione come parametro. Quindi chiameresti la funzione usando il suo puntatore. In questo caso non avresti bisogno del file lib, ma hai ancora bisogno del file header, dove troverai il prototipo della funtion.

    
risposta data 09.03.2018 - 11:37
fonte

Leggi altre domande sui tag