Pregunta

En mi Sconscript tengo la siguiente línea:

Program("xtest", Split("main.cpp"), LIBS="mylib fltk Xft Xinerama Xext X11 m")

¿Cómo hago que Scons use mylib.a en lugar de mylib.so, mientras se vincula dinámicamente con las otras bibliotecas?

EDITAR: Busca usar la menor cantidad de hacks específicos de la plataforma como sea posible.

¿Fue útil?

Solución

Pasar el FilePath completo envuelto en un nodo de archivo forzará la vinculación estática. Por ejemplo:

lib = File('/usr/lib/libfoo.a')
Program('bar', 'main.c', LIBS = [lib])

Producirá la siguiente línea de comandos de enlazador

g++ -o bar main.o /usr/lib/libfoo.a

Observe cómo la bandera "-l" no se pasa al enlazador para esta entrada LIBS. Esto efectivamente obliga a la vinculación estática. La alternativa es modificar LinkFlags para obtener lo que desea con la advertencia de que está evitando el escáner de dependencia de la biblioteca: el estado de la biblioteca no se verificará para las reconstrucciones.

Otros consejos

Para que esta plataforma sea independiente, agregue el env ['shlibsuffix'] en la biblioteca que desea usar. Env ['shlibsuffix'] le brinda este sufijo de entornos para bibliotecas compartidas.

También tiene ['shlibprefix'], ['libprefix'], ['libsuffix'] y ['progsuffix'], todo útil para situaciones como esta.

Editar:

Obviamente no he hecho entendido, así que aclararé. El valor de retorno de estas búsquedas son cadenas de pre/sufijos que utiliza la plataforma. De esa manera, puede consultar el archivo que necesita en cada plataforma. Tenga en cuenta que no puede usarlo como una cadena pura, debe ser incrustado como un nodo de archivo como sugiere Bennyg. Trabajar con nodos es de todos modos la mejor solución, ya que los nodos de archivo son mucho más versátiles que una cadena.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top