2010-12-01 17 views
9

Estoy usando una biblioteca de código cerrado (por Activ financial) que incluye con su API una distribución de impulso, tanto algunos aumentan los archivos de encabezado y aumentan los archivos de biblioteca.biblioteca de código cerrado incluye distribución de impulso

También uso Boost en mi base de código existente, y necesito usar Activ de mi código existente.

Algunos puntos

  • puedo encapsular mi uso de Activ de manera que toda la parte cantidades Activ a una única clase que escribí que no exponga cualquiera de las cabeceras de Activ
  • Este archivo de cabecera sola no utiliza ningún incremento nada
  • de esta manera puedo asegurar que las partes de mi código Activ impulsar el uso de archivos Activ HPP, y mi código utiliza archivos de HPP de mi Boost

mi preocupación viene en la vinculación. ¿Cómo puedo asegurarme de que mi código dependiente de Activ se vincule con Activ's Boost y mi otro código se vincule a mi Boost?

Estoy usando g ++ ahora, también lo haré en VS2008. Lo tengo trabajando en VS2008 antes, pero no tengo idea de cómo se vincula todo. Quiero intentar asegurarme de que esté hecho correctamente.

¿Hay alguna forma de hacerlo sin encapsular aún más la parte Activ en una biblioteca dinámica?

Editar:

Por un lado, mi producto final es siempre un archivo ejecutable. Para los dos, me conecto estáticamente para impulsarme. La biblioteca Activ incluye versiones estáticas y dinámicas de las bibliotecas de objetos de Boost, y planeo vincularla estáticamente.

Nunca paso Impulso de objetos entre códigos que utilizan diferentes versiones de refuerzo.

La pregunta es: ¿Cómo se enlazan uno o CPP .o archivo de objetos en una archivo de la biblioteca, y luego asegurarse de que otras .o archivos enlaza con los objetos idénticos en otro archivo de biblioteca? es posible?

Respuesta

3

¿La biblioteca enlaza dinámicamente o estáticamente a Boost? Si está enlazado estáticamente, ¿la biblioteca expone los símbolos en el archivo DLL (exportación de declspec)?

Si la biblioteca está vinculado estáticamente y los símbolos no están expuestos, y no pasa cualquier estructura de datos Boost (smart_ptr, hilos, etc) de ida y vuelta, es probable seguro de usar su propia versión de la Aumente la biblioteca en su DLL.

+0

Ver mi edición. Básicamente, parece que necesito un hack al enlazar. Tengo dos bibliotecas de objetos (cada versión de Boost) que tiene símbolos idénticos, pero un código no idéntico para esos símbolos, y necesito asegurarme de que cada uno de mis archivos .o se vincule con los archivos .a Boost correctos. Por lo que sé, el enlace solo puede hacerse al final, así que no estoy seguro de qué hacer. (Para los archivos de inclusión, el problema es más fácil, ya que puedo compilar cada archivo cpp con una directiva '-I' diferente en gcc.) ¿Estoy pensando en esto correctamente? – Scott

Cuestiones relacionadas