/ / ¿Cómo permitir el reemplazo de los métodos existentes en el momento del enlace con Xcode? ¿Usando 'ar -r' en lugar de libtool? - c ++, xcode, g ++, xcodebuild, libtool-xcode

¿Cómo permitir el reemplazo de los métodos existentes en el tiempo de enlace con Xcode? ¿Usando 'ar -r' en lugar de libtool? - c ++, xcode, g ++, xcodebuild, libtool-xcode

Tenemos algunos códigos que se compilan bien en Mac OS X con g ++ usando makefiles, pero no puedo compilar con éxito con Xcode.

Aquí está la breve descripción general de la configuración del proyecto, hay ejemplos de lo siguiente:

  1. libA.a

    • contiene myclass_stub.cpp que implementa func ()
    • Nuestros makefiles empaquetarían la biblioteca con "ar -r", que permite el reemplazo de los métodos existentes.
    • Xcode usaría libtool para empaquetarlo
  2. program.exe contiene myclass.cpp que implementa func () también. y enlaces libA.a estáticamente usando g ++

Si tuviera que compilar libA.a y program.exe con Xcode, se quejará de la función "Duplicar símbolo" en myclass_stub.o y myclass.o en el momento del enlace.

También intenté compilar program.exe con Xcode y vincularlo con libA.a que estaba empaquetado con "ar -r", pero aún se queja sobre el símbolo duplicado.

Tener implementación duplicada podría no serIdeal, pero no puedo sortearlo en este momento. Si pudiera obtener el código para compilar con makefiles usando "ar" y "g ++" estándar, me gustaría saber qué opciones necesito configurar en Xcode para que funcione.

Ahora, mis preguntas:

  1. Me gustaría usar "ar -r" para empaquetar la biblioteca en Xcode en su lugar. ¿Es posible? ¿Si es así, cómo? ¿Hay una opción similar con libtool donde puedo forzar el reemplazo de los símbolos existentes?

  2. Supongo que la diferencia entre libtool y "ar-r "podría no ser la principal diferencia entre construir con Xcode y con makefiles. Tengo las mismas marcas de compilación, pero la lista de archivos de entrada / objeto es probablemente en un orden diferente. ¿Ves alguna otra solución posible para esto? error de vinculación?

Vi una pregunta relacionada con @ libtool vs ar para crear una biblioteca estática (enlazador xcode), pero no la solución

Por cierto, también intenté agregar all-load y --force-load, pero no parecen hacer mucho ya que solo estoy tratando de compilar para x86_64.

Respuestas

0 para la respuesta № 1

No sé nada acerca de xcode, pero ¿has pensado en usar símbolos débiles (en g ++: atributo((débil))) para los símbolos que deben ser anulados?