Başka bir uygulama tarafından kullanılan ve * .so nesneleri gerektiren başka bir uygulama tarafından kullanılan paylaşılan bir kitaplığım var. Kitaplığım, statik olarak bağlantılı olması gereken sqlite3'ü kullanır (kesinlikle kendi kendine yeten bir ikiliye ihtiyacım var).C++ Statik olarak bağlantılı paylaşılan kitaplık
ben derlemek ve Kitaplığımı bağlamak deneyin:
-fpic -flto -pthread -m64
-flto -static -shared
aşağıdaki hata ile sona:
/usr/bin/ld: /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
Ne -fpic ile yeniden derleme ile ilgilidir? Benim kodum veya CRT mi?
Nesnemi aynı sonuçla -fPIC ile derlemeye çalıştım.
Teşekkürler.
DÜZENLEME:
sorun SQLite3 ile ilişkili görünmemektedir.
g++ -c -fPIC -o bar.o bar.cpp
g++ -shared -o bar.so bar.o
ancak bu gibi:
g++ -c -fPIC -o bar.o bar.cpp
g++ -static -shared -o bar.so bar.o
sorun CRT ile ilişkili olduğu görünmektedir
ben derler ve bunun gibi bağlantıları basit tek satırlık-do-nothing kütüphanesini yazdığı (crtbeginT.o). GCC'yi yeniden yazmam mı gerekiyor?
Bu biraz kafa karıştırıcı. Kitaplığınızı statik bir sqlite kitaplığına bağlamaya mı çalışıyorsunuz yoksa başka bir şey yapmaya mı çalışıyorsunuz? – nos
PIC = Konum Paylaşılan lib'ler için gerekli Bağımsız Kod (çoğu mimaride, sanırım) – sehe
@nos Paylaşılan kitaplığımı sqlite3.a ile bağlamaya çalışıyorum – Petr