使用 G++ 编译带有头文件和静态库的程序时,确定缺少依赖项的最佳方法是什么?

JDD

我正在尝试为 Acontis etherCAT 主堆栈编译演示,但 G++ 在尝试编译时报告了许多未定义的引用,但没有提供任何关于需要包含哪些头文件或库来纠正问题的线索。由于 G++ 没有报告任何引用的缺失标头,我如何确定需要哪些文件来满足未定义的引用?

如果重要,我可以从源创建目标文件,链接期间会发生错误。Acontis 没有提供生成文件。

Acontis for linux 提供的文档如下: 2.5.1 编译演示 Linux编译

I have tried using g++ and hunting down the header locations (Format simplified to make it more readable and <Install_Location> inserted so that each argument fits on a single line):

g++
-I <Install_Location>/Examples/EcMasterDemo/ 
-I <Install_Location>/SDK/INC/ 
-I <Install_Location>/SDK/INC/Linux 
-I <Install_Location>/Examples/Common/Linux 
-I <Install_Location>/Examples/Common/ 
-I <Install_Location>/Sources/Common 
-o test 
EcDemoApp.cpp 
<Install_Location>/Examples/Common/Linux/EcDemoMain.cpp 
<Install_Location>/Sources/Common/EcTimer.cpp 
<Install_Location>/SDK/LIB/Linux/x64/libAtemRasSrv.a 
<Install_Location>/SDK/LIB/Linux/x64/libEcMaster.a 
-pthread

This is a short snippet of the output: g++ 终端输出

I am running Ubuntu 20.04 with 4.14.213-rt103 #1 SMP PREEMPT RT for Kernel. g++ is version 9.3.0


Update after fixing the -l arguments (thank you steeldriver)

command executed:

/ClassB/Examples/EcMasterDemo$ gcc                            
<Install_Dir>/ClassB/Examples/Common/Linux/EcDemoMain.cpp                         
<Install_Dir>/ClassB/Examples/EcMasterDemo/EcDemoApp.cpp                          
<Install_Dir>/ClassB/Sources/Common/EcTimer.cpp                                   
-o test                                                                                                  
-I <Install_Dir>/ClassB/Examples/EcMasterDemo                                     
-I <Install_Dir>/ClassB/SDK/INC/Linux                                             
-I <Install_Dir>/ClassB/SDK/INC                                                   
-I <Install_Dir>/ClassB/Sources/Common                                            
-I <Install_Dir>/ClassB/Examples/Common                                           
-I <Install_Dir>/ClassB/Examples/Common/Linux                                     
-L <Install_Dir>/ClassB/SDK/LIB/Linux/x64                                         
-lAtemRasSrv -lEcMaster -pthread -ldl -lrt

Which seemed to have fixed a few undefined references, but a lot still exist.

g++ 终端输出

JDD

There were two issues preventing the compiling of the program.

First, as answered by steeldriver, the library path was not correctly included and the libs were not correctly referenced in GCC.

Second, several cpp source files were missing, either accidentally deleted or not successfully decompressed from the archive the first time.

一旦这些问题得到纠正,程序就会根据程序员在文档前面提供的演示源文件列表在 GCC 中正确构建。

作为参考,由于 Acontis 不提供编译器示例,这些是允许 Acontis etherCAT 主演示在 ubuntu linux 20.04 上构建的 G++ 参数:

g++                            
<Install_Dir>/ClassB/Examples/Common/Linux/EcDemoMain.cpp                         
<Install_Dir>/ClassB/Examples/EcMasterDemo/EcDemoApp.cpp                          
<Install_Dir>/ClassB/Examples/Common/EcDemoParms.cpp                              
<Install_Dir>/ClassB/Examples/Common/EcSelectLinkLayer.cpp                        
<Install_Dir>/ClassB/Examples/Common/EcNotification.cpp                           
<Install_Dir>/ClassB/Examples/Common/EcSdoServices.cpp                            
<Install_Dir>/ClassB/Examples/Common/EcSlaveInfo.cpp                              
<Install_Dir>/ClassB/Examples/Common/EcLogging.cpp                                
<Install_Dir>/ClassB/Sources/Common/EcTimer.cpp                                   
-o test                                                                                                  
-I <Install_Dir>/ClassB/Examples/EcMasterDemo                                     
-I <Install_Dir>/ClassB/SDK/INC/Linux                                             
-I <Install_Dir>/ClassB/SDK/INC                                                   
-I <Install_Dir>/ClassB/Sources/Common                                            
-I <Install_Dir>/ClassB/Examples/Common                                           
-I <Install_Dir>/ClassB/Examples/Common/Linux                                     
-L <Install_Dir>/ClassB/SDK/LIB/Linux/x64                                         
-lAtemRasSrv -lEcMaster -pthread -ldl -lrt -Wall

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用g ++从cpp文件和静态库创建共享库

来自分类Dev

使用g ++的C ++ XInput编译

来自分类Dev

使用G ++静态链接Matio库

来自分类Dev

使用G ++编译CPP文件时出错

来自分类Dev

使用g ++或CC编译多个C ++文件

来自分类Dev

如何使用带有CodeBlocks的G ++为64位编译?

来自分类Dev

为什么该程序使用gcc而不是g ++进行编译?

来自分类Dev

使用-g gcc标志编译的程序是否比不使用-g编译的程序慢?

来自分类Dev

使用-g gcc标志编译的程序是否比不使用-g编译的程序慢?

来自分类Dev

同时使用Bootstrap和960g的最佳方法是什么?

来自分类Dev

编译无Ros的Roscpp(使用G ++)

来自分类Dev

使用g ++的OpenGL代码中的编译问题

来自分类Dev

包含类并使用g ++进行编译

来自分类Dev

尝试使用Codelite / G ++进行编译

来自分类Dev

无法使用G ++编译器

来自分类Dev

使用 nvcc 和 g++ 编译

来自分类Dev

使用gcc和g ++分别编译带有C和C ++文件的项目?

来自分类Dev

使用静态库比包含头文件有什么好处?

来自分类Dev

如何使用gcc / g ++编译多个cpp文件头文件?

来自分类Dev

使用CMake而不是g ++链接GDAL库

来自分类Dev

如何安装使用g77的库

来自分类Dev

什么是g,我该如何使用

来自分类Dev

使用Linux和G ++生成pdb文件

来自分类Dev

g ++使用外部目录中的目标文件

来自分类Dev

在g ++中使用依赖项时出现的问题

来自分类Dev

如何动态使用.replace(/ \ + / g,'')方法

来自分类Dev

使用G ++在Netbeans中无法编译Boost库

来自分类Dev

使用gsl进行g ++编译:找不到库

来自分类Dev

无法使用g ++用C ++代码编译C库