2013-07-31 2 views
2

Извините за запутанную формулировку.Как создать статическую библиотеку, связанную с другой библиотекой, и ее можно использовать третьей программой, которая связывает обе библиотеки?

В принципе, я хочу создать статическую библиотеку (libone.a), которая должна связывать другую статическую библиотеку (libtwo.a). libone.aиlibtwo.a оба связаны статически в другую программу (назовем его program), выполнив следующие действия:

$(CC) -o program something.o anotherthing.o -L/path/to/lib -lone -ltwo 

Когда program делает вызов метода в libtwo.a он должен идти к libtwo.a загружаемой с program. Но всякий раз, когда program делает вызов метода в libone.a, который вызывает метод в libtwo.a, он должен вызвать libtwo.a, который был встроен, когда было создано libone.a. Да, я понимаю, что это взорвет размер файла, загрузив две из тех же библиотек, но я в порядке с этим.

Причина, по которой я пытаюсь это сделать, потому что у меня есть program, который использует OpenSSL (в данном случае libcrypto.a), а моя статическая библиотека также использует libcrypto. Однако у меня есть требование в моей библиотеке, что OpenSSL является FIPS действительным (то есть FIPS_mode_set(1)), но при этом произойдет разрыв program. Короче говоря, я хочу использовать библиотеки OpenSSL. Тот, который вызван program изначально должен использовать свой собственный, и тот, который вызвал моя библиотека, должен использовать тот, который я связал, и является FIPS действительным.

Возможно ли это?

ответ

1

Возможно ли это?

Нет, это просто не может быть сделано с архивными библиотеками (это может быть сделано с разделяемыми библиотеками, но требует большой осторожности, чтобы избежать столкновений символов).