C ++链接无法找到从Unix到Linux的项目迁移库

时间:2017-02-02 14:54:42

标签: c++ linux unix linker g++

解决因迁移导致的所有编译错误后,现在存在库的链接器错误。

原始输出如下(项目中的某些名称因显而易见的原因被替换):

----------------------------------------------------------------
 (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)/libprocessControl.sl
  2. 列出itemFBALIB = -L $(TEMP_SHLIB_DIR)-llibfba.sl -llibprocessControl.sl
  3. FBALIB = -L $(TEMP_SHLIB_DIR)-l $(TEMP_SHLIB_DIR)/libfba.sl -lprocessControl
  4. 没有任何作用!

    请问,我缺少什么想法?

1 个答案:

答案 0 :(得分:1)

似乎.sl文件是HP-UX共享库,而linux使用.so扩展名来共享库。似乎您将HP-UX库复制到Linux,但这不起作用。

唯一的解决方案是获取适用于Linux的等效库文件,并使用正确的.so扩展名。