¿Pueden las personas saber qué bibliotecas usa su aplicación C ++ compilada?

Creo que está proponiendo violar intencionalmente los términos de la GPL y espero que no lo atrapen. Creo que deberías reconsiderar tu estrategia:

Si no planea ganar dinero con la aplicación, no estoy seguro de por qué desea mantener el código fuente en secreto. ¿Crees que hay un valor monetario en el código fuente? Ninguna compañía comprará su código fuente (o lo contratará) si el código tiene infracciones de licencia.

¿Mantiene el código en secreto porque no quiere perder el control del proyecto? Personalmente no me preocuparía por eso. 99 de cada 100 proyectos siguen siendo proyectos personales oscuros a los que nadie querrá contribuir, sin importar el robo. Y si su proyecto se vuelve tan exitoso / popular que la gente quiere bifurcarlo, entonces tendrá una influencia inmensa y podrá mantener el control.

Tienes un par de alternativas:

1.Haga que su código fuente esté disponible gratuitamente
2. Vea si hay bibliotecas similares disponibles bajo una licencia de tipo BSD, que no requiere que publique su código fuente.

Para responder a su pregunta original: en general, . Su binario estará lleno de símbolos de su código y de la biblioteca en cuestión, y aunque los símbolos de C ++ están destrozados para aplanar las referencias a los miembros de la clase, etc., aún son visualmente reconocibles y existen herramientas para exigirlos.

George Moromisato ya ha abordado las dudas de su razonamiento.

Observo que elegiste citar “GPL”. ¿Es porque la licencia no es pura GPL? Como no ha mencionado qué biblioteca está utilizando, depende de usted leer cuidadosamente el texto de la licencia (o pedirle a un abogado que lo haga de forma gratuita ) para determinar si lo que planea hacer es, de alguna manera perversa, realmente permitido por la licencia.

Terminaré con dos observaciones del cajón Mommy-Always-Said:

Siempre da crédito donde es debido
De lo contrario, nadie te lo dará

y:

No tienes que creer en el karma, eso es verdad
Pero nunca olvides que el karma cree en ti

Haz lo correcto y duerme mejor por la noche.

Hay un comando en Linux llamado ldd , cualquier usuario puede ejecutar este comando en algún ejecutable y le mostrará las dependencias de la biblioteca que tiene esta aplicación, por ejemplo:

  ldd / usr / bin / top
     linux-vdso.so.1 (0x00007fffd59fe000)
     libprocps.so.3 => /usr/lib/libprocps.so.3 (0x00007ffedc9ac000)
     libncursesw.so.5 => /usr/lib/libncursesw.so.5 (0x00007ffedc747000)
     libdl.so.2 => /usr/lib/libdl.so.2 (0x00007ffedc543000)
     libc.so.6 => /usr/lib/libc.so.6 (0x00007ffedc199000)
     /lib64/ld-linux-x86-64.so.2 (0x00007ffedcbd0000)

Además, como George Moromisato mencionó, vale la pena verificar si lo que desea publicar es compatible con GPL. Existen otros tipos de licencias de código abierto que pueden adaptarse a su situación.

ACTUALIZACIÓN: Como mencionó Peter de Vroede, .so significa “objeto compartido”, este método mostrará a los objetos que la aplicación está utilizando y que el sistema operativo comparte.

Con respecto a las bibliotecas compiladas estáticamente, es posible ver algunos símbolos usando GDB incluso si el ejecutable no se compiló con símbolos de depuración, aunque depende del sistema operativo que esté utilizando. En cualquier caso, siempre sería posible calcular el contenido del código de ensamblado que se genera, pero no es una tarea trivial.

Puede valer la pena agregar que eventualmente será descubierto y humillado públicamente. Cuanto más popular sea su software, menos tiempo tomará. Una vez que haya sido humillado por romper la GPL, estará en Internet para siempre. Cada entrevista de trabajo por el resto de tu vida incluirá a alguien preguntando por qué.

En resumen, nunca vale la pena. En el mejor de los casos, nadie lo usa, en cuyo caso cuál es el punto. En el peor de los casos, es popular y aterrizas en el salón de la vergüenza de Internet.