Używam CMAKE w moim projekcie.

Kod CMakeles.txt to:

set( GS7_INCLUDE_DIRS "${EXTERNAL_PATH}/ds_sdk/SDK_GS7.0/include" CACHE PATH "SDK GS7.0 include directory" )
set( GS7_LIBRARIES "${EXTERNAL_PATH}/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49/libdsDriverGCC49.so" "${EXTERNAL_PATH}/ds_sdk/SDK_GS7.0/lib/linux/x64/gcc49/libdsUtilGCC49.so" CACHE FILEPATH "SDK GS7.0 libdsDriver full path" )
...
add_executable( FxLibLoader ... )
...
target_link_libraries( FxLibLoader
  "${GS7_LIBRARIES}"
  ...
)

Kiedy exect cmake --build, ostateczne polecenie łączące jest

C ++ -G cmakefiles / fxlibloader.dir / fxlibloader.cpp.o cmakefiles / fxlibloader.dir / fxlogger.cpp.o cmakefiles / fxlibloader.dir / mtoproto.pb.cc.o cmakefiles / fxlibloader.dir / stats.cpp.o - O FXLIBLOADER -L / MNT / E / DESARROLOLO / SANDBOX_MTO / EXTARLBS / DS_SDK / SDK_GS7.0 / LIB / Linux / X64 / GCC49 -Wl, -RPath, / MNT / E / Desarrollo / Pymx_II / MTO / MTOAPI / Debug: / MNT / E / Desarrollo / Sandbox_Mto / Externalbs / Protobuf / Protobuf-3.10.1 / Linux / Lib / X64: / MNT / E / DESarrollo / Sandbox_Mto / Externalbs / Hazelcast / Linux / Lib / X64: / MNT / E / Desarrollo / Sandbox_Mto / Externallibs / DS_SDK / SDK_GS7.0 / Lib / Linux / X64 / GCC49 /MNT/e/desarrollo/Pymx_II/Mto/mtoapi/Debug/libmtoapi_d.so / MNT / E / Desarrollo / Sandbox_Mto / Externallibs / Protobuf / Protobuf- 3.10.1 / Linux / lib / x64 / libprotobuf.so /usr/lib/x86_64-linux-gnu/libython2.7.so -ldl / mnt / e / desarrollo / piaskbox_mto / externallibs / hazelcast / linux / lib / x64 / libazelcastClient3.12_64.SO -LDSDRIVERGCC49 -LdsutilgCC49 -lstdc ++ FS

Gdzie opcje łącza są dobre. Kompilacja i łączenie odbywa się bez błędów, ale kiedy to robię

& gt; ldd fxlibloader | fgrep znaleziono
.
.. libdsutilgcc49.so = & gt; nie znaleziono

Jednak biblioteka libdsdrivergc49.so, która znajduje się w tym samym katalogu, co zaginiona ... znaleziono!

Również, jeśli to zrobię

Ld_library_path = '/ mnt / e / desarrollo / sandbox_mto / externallibs / ds_sdk / sdk_gs7.0 / lib / linux / x64 / gcc49' ldd fxlibloader | fgrep znaleziony

Dostaję pusty wynik, wszystkie biblioteki są zlokalizowane!

  • Co ja robię źle?
  • Jak to rozwiązać?
2
Trauma 13 październik 2020, 12:03

1 odpowiedź

Najlepsza odpowiedź

Co ja robię źle?

Oczekujesz, że linker wyszukasz biblioteki w katalogu {x0}}, podczas gdy łącznik nie.

Jak to rozwiązać?

Poinstruuj łącznik do wyszukiwania w tym katalogu do biblioteki lub skopiuj bibliotekę do jednego z katalogów już przeszukiwanych przez łącznik. Zobacz man ld, aby uzyskać więcej informacji. Możesz się z tym zainteresować -rpath.

1
KamilCuk 13 październik 2020, 09:48