# pragma comment (lib, "xxx.lib") equivalent under Linux?


Tengo un archivo de biblioteca estático llamado libunp.a, sé que podría usar gcc -lunp xx para enlazar a la biblioteca.

Podría usar #pragma comment(lib,"xxx.lib") para decirle al compilador de Microsoft C/C++ que incluya la biblioteca; ¿cómo podría hacerlo bajo Linux/GCC?

Author: vaxquis, 2009-11-06

4 answers

Simple; no se puede. GCC no tiene tal equivalente. Especifique-l como parámetro gcc, cree un script enlazador, llame a ld, llame al 911 o lo que sea.

No es que tal pragma tenga sentido. Las bibliotecas deben especificarse durante el paso de enlace. Tal información simplemente no pertenece dentro de una unidad de traducción. Una unidad de traducción puede ser preprocesada, compilada y ensamblada incluso sin una etapa de enlace. La cadena de herramientas utilizada por Visual Studio permite esto porque es braindead y siempre realiza enlaces.

Es posible que desee ahorrarse algo de tedioso escribir y crear un MakeFile para su proyecto: GNU Make Manual

 -3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-06 03:35:57

Las bibliotecas deben especificarse durante el paso de enlace. Dicha información simplemente no pertenece a una unidad de traducción. Una unidad de traducción puede ser preprocesada, compilado y ensamblado incluso sin una etapa de enlace.

Simplemente porque #pragma comment(lib,"xxx.lib") esté en el archivo fuente no significa que el compilador lo consuma. De hecho, entra como un comentario y es utilizado posteriormente por el enlazador. No muy diferente a *nix.

 18
Author: Jeffrey Walton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-24 22:34:07

No parece haber ninguna mención de ningún pragmas equivalente en la página del manual de GCC sobre pragmas.

Una de las razones por las que GCC no admite enlaces en el código fuente fue que a veces, el enlace correcto depende del orden del enlace; y esto requeriría que te aseguraras de que el orden del enlace se realice correctamente sin importar el orden de compilación. Si vas a trabajar tanto, también puedes pasar los argumentos del enlazador en la línea de comandos (o no), supongo.

 15
Author: Mark Rushakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-06 03:35:39

Utilice este indicador GCC para generar un error para pragmas desconocidos. Le dirá rápidamente si el compilador lo entiende.

-Werror=unknown-pragmas

 0
Author: J. Winarske,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-21 21:03:34