Definición múltiple de funciones en línea al vincular libs estáticas

Tengo un programa C ++ que compilo con mingw (gcc para Windows). Uso de la versión TDM de mingw que incluye gcc 4.4.1. El ejecutable enlaza con dos archivos de biblioteca estática (.a): uno de ellos es una biblioteca de terceros escrita en C; la otra es una biblioteca C ++, escrita por mí, que usa la biblioteca C y proporciona mi propia API C ++ en la parte superior.

Una parte (en mi opinión, excesiva) de la funcionalidad de la biblioteca C se implementa en funciones en línea. No puede evitar incluir las funciones en línea cuando usa la API de la biblioteca C, pero cuando trato de vincularlo todo, recibo errores de enlace que dicen que hay una definición múltiple de todas las funciones en línea, ambas que tengo llamado en mi biblioteca de envoltura de C ++ y las que no tengo, básicamente, cualquier cosa definida en línea en los encabezados ha obtenido una función creada tanto en la biblioteca de C como en la biblioteca de C ++.

No causa errores de definición múltiple cuando los archivos de inclusión se usan varias veces en diferentes archivos .c o .cpp en el mismo proyecto; El problema es que genera una definición por biblioteca.

¿Cómo / por qué el compilador genera funciones y símbolos para estas funciones en línea en ambas bibliotecas? ¿Cómo puedo forzarlo a dejar de generarlos en mi código? ¿Hay alguna herramienta que pueda ejecutar para eliminar las funciones duplicadas del archivo .a, o una forma de hacer que el enlazador ignore varias definiciones?

(Para su información, la biblioteca de terceros incluye #ifdef __cplusplus y guardias externos "C" en todos sus encabezados; de todos modos, si ese fuera el problema, no causaría una definición múltiple de símbolo, causaría el problema opuesto porque el símbolo podría ser indefinido o al menos diferente)

En particular, los errores de enlace NO se producen si hago un enlace a la DLL de la biblioteca C de terceros; sin embargo, me salen extraños fallos de tiempo de ejecución que parecen tener que ver con que mi código tenga su propia versión de funciones que debería llamar desde la DLL. (Como si el compilador estuviera creando versiones locales de funciones que no solicité).

Se han hecho versiones similares de esta pregunta antes, sin embargo, no encontré la respuesta a mi situación en ninguno de estos:

La respuesta a esta pregunta fue que el póster tenía múltiples definicionesvariables, mi problema es la definición múltiple de funciones en línea:Errores repetidos de definición múltiple al incluir el mismo encabezado en múltiples cpps

Este era un programa de MSVC, pero estoy usando mingw; Además, el problema del póster en esta pregunta fue la definición de un constructor de clase C ++ fuera del cuerpo de la clase en un encabezado, mientras que mi problema es con las funciones C que están en línea:Problema de definición múltiple de Lib estática

Este tonto renombró todo su código C como archivos C ++ y su código C no era C ++ - seguro:Definición múltiple de muchas funciones std :: al vincular

Este solo quería saber por qué violar la regla de una definición no era un error:Comportamiento impredecible de las funciones en línea con diferentes definiciones

Respuestas a la pregunta(1)

Su respuesta a la pregunta