C++ Linking 找不到关于从 Unix 到 Linux 的项目迁移的库

Posted

技术标签:

【中文标题】C++ Linking 找不到关于从 Unix 到 Linux 的项目迁移的库【英文标题】:C++ Linking cant find library on project migration from Unix to Linux 【发布时间】:2017-02-02 14:54:41 【问题描述】:

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

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

----------------------------------------------------------------
 (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

我尝试了什么:

    FBALIB = -L$(TEMP_SHLIB_DIR) $(TEMP_SHLIB_DIR)/libfba.sl $(TEMP_SHLIB_DIR)/libprocessControl.sl 列表项FBALIB = -L$(TEMP_SHLIB_DIR) -llibfba.sl -llibprocessControl.sl FBALIB = -L$(TEMP_SHLIB_DIR) -l$(TEMP_SHLIB_DIR)/libfba.sl -lprocessControl

没有任何效果!

请问,有什么我想念的想法吗?

【问题讨论】:

你有一个名为 libfba.so 的文件吗? @MatiasValdenegro 不,只是找到了那个……为什么?像我展示的那样有 libfba.sl。 因为这是您使用 -lfba 时链接器查找的文件 不,那不行,好像.sl文件不是Linux共享库文件,你从哪里得到的? "Unix" 只是“Unix”的许多不同变体和实现的通用名称。您从哪个特定的“Unix”移植?什么是*.sl 文件?这些文件与库有什么关系?您是否刚刚从另一个平台复制文件并尝试在您的 Linux 系统中使用它们而不进行任何类型的转换或重建? 【参考方案1】:

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

唯一的解决方案是为 Linux 获取具有适当 .so 扩展名的等效库文件。

【讨论】:

以上是关于C++ Linking 找不到关于从 Unix 到 Linux 的项目迁移的库的主要内容,如果未能解决你的问题,请参考以下文章

如何将帧写入视频文件?

FBSDKCore 找不到 RCTBridgeModule.h

使用 Qt/C++ 通过 JNI 调用 Java 代码。 FindClass 找不到类

在 unix 中找不到 db2 命令

C++:我将如何获得 unix 时间?

如何在 Linking.openURL(url) 添加标头参数