2017-02-02 5 views
0

После устранения всех ошибок компиляции из-за миграции теперь возникают ошибки компоновщика для библиотек.C++ Связывание не удается найти библиотеку при миграции проекта из Unix в Linux

Оригинальный выход следующим образом (некоторые названия в проекте были заменены по понятным причинам):

---------------------------------------------------------------- 
(G) Linking module_name.o to make module_name 
    LDOPTS set to: 
    SHLIB Temp Path: /tmp/fbaSHLIBs020217035348fbamgr 
    FBA libraries: -L/tmp/fbaSHLIBs020217035348fbamgr -lfba -lprocessControl 
    Application libraries: -L/opt/app/fba/devl_rel_ver/bin/lib -lfba -lprojNameGenEdit -lprojNameTraceTool -lprojNameTables -lprojNameCommCcSc -lprojNamerecProc -lprojNameGenMap -lprojNameLogicalTracker -lprojNameCallCodes -lprojNameStrCodes -lprojNameFileVal -lprojNameReports -L -ltmi -L/opt/IBM/db2/V8.1/lib64 -ldb2 
g++ -o module_name module_name.o \ 
       \ 
       -I/opt/app/fba/devl_rel_ver/common \ 
       -L/tmp/fbaSHLIBs020217035348fbamgr -lfba -lprocessControl \ 
       -L/opt/app/oraclnt/oracle/product/11.2.0.3/lib -lclntsh \ 
       `cat /opt/app/oraclnt/oracle/product/oraclient/lib/ldflags` \ 
       `cat /opt/app/oraclnt/oracle/product/oraclient/lib/sysliblist` \ 
       -L/opt/app/fba/devl_rel_ver/bin/lib -lfba -lprojNameGenEdit -lprojNameTraceTool -lprojNameTables -lprojNameCommCcSc -lprojNamerecProc -lprojNameGenMap -lprojNameLogicalTracker -lprojNameCallCodes -lprojNameStrCodes -lprojNameFileVal -lprojNameReports -L$TMI_HOME -ltmi -L/opt/IBM/db2/V8.1/lib64 -ldb2 
/usr/bin/ld: cannot find -lfba 
collect2: ld returned 1 exit status 
make: *** [module_name] Error 1 

файлы в папке временных (также, с выше заменой имени сделано):

ls /tmp/fbaSHLIBs020217035348fbamgr 
libfba.sl    libprojNameCallCodes.sl libprojNameFileVal.sl libprojNameGenMap.sl   libprojNamerecProc.sl libprojNameStrCodes.sl libprojNameTraceTool.sl 
libprocessControl.sl libprojNameCommCcSc.sl libprojNameGenEdit.sl libprojNameLogicalTracker.sl libprojNameReports.sl libprojNameTables.sl 

Что я пробовал:

  1. FBALIB = -L $ (TEMP_SHLIB_DIR) $ (TEMP_SHLIB_DIR) /libfba.sl $ (TEMP_SHLIB_DIR)/libprocess Control.sl
  2. Список itemFBALIB = -L $ (TEMP_SHLIB_DIR) -llibfba.sl -llibprocessControl.sl
  3. FBALIB = -L $ (TEMP_SHLIB_DIR) -l $ (TEMP_SHLIB_DIR) /libfba.sl -lprocessControl

Ничего не работает!

Пожалуйста, любые идеи, что мне не хватает?

+0

У вас есть файл libfba.so где-нибудь? –

+0

@MatiasValdenegro Нет, просто нашел на этом ... почему? есть libfba.sl, как я показал. – Carmageddon

+0

Потому что это файл, который ищет компоновщик, когда вы используете -lfba –

ответ

1

Похоже, файлы .sl являются совместно используемыми библиотеками HP-UX, а linux использует расширение .so для разделяемых библиотек. Кажется, вы копировали библиотеки HP-UX в Linux, и это не сработает.

Единственное решение - получить эквивалентные файлы библиотеки для Linux с соответствующим расширением .so.