/ usr / bin / ld找不到-l <nameoflibrary>

时间:2015-12-02 07:55:38

标签: c++ linux ubuntu g++

我编写了一些程序,并尝试使用g ++编译它们,因此,

$ g++ minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp -L/usr/local/lib/ -lfwlib32 -lpthread -o adapter

我一直收到以下错误:

/usr/bin/ld: cannot find -lfwlib32
collect2: error: ld returned 1 exit status

fwlib32.h是我想要包含的库。共享对象文件libfwlib32.so存在于/usr/local/lib以及/usr/lib中。但我无法链接到它。我尝试过类似问题提供的所有解决方案,包括

  

$ export LIBRARY_PATH = / usr / local / lib /

     

$ export LD_LIBRARY_PATH = / usr / local / lib

我也为/usr/lib完成了上述操作,但仍然是同样的错误。 我已经尝试在命令行中使用-L选项,但我仍然收到错误。

我甚至创建了一个名为lib的新文件夹,将libfwlib32.so.1.0.1粘贴到其中并运行

  

$ ln -s~ / lib / libfwlib32.so.1.0.1~ / lib / libfwlib32.so

在控制台上创建一个新的.so文件,并在命令行中将~/lib作为-L选项的参数。它没有任何区别。我正在撕裂我的头发,所以任何帮助都将受到赞赏。

非常感谢!

3 个答案:

答案 0 :(得分:1)

你应该把-l选项放在最后一个:

$ g++ minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp -L/usr/local/lib/ -o adapter -lfwlib32 -lpthread 

注意:请确保所有标题和源文件都在同一个文件夹中。

答案 1 :(得分:0)

错误消息表明-lfwlib32被解释为文件名而不是-l参数。将所有参数放在要编译的文件之前

g++ -m32 -L/usr/local/lib/ -lfwlib32 -lpthread -o adapter minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp

正如@Erik Johannessen所指出的,libfwlib32.so是一个32位的库,所以你需要添加-m32来构建一个32位的可执行文件。

答案 2 :(得分:0)

请注意,指定-L~ / lib不会起作用,因为shell不会扩展〜。此外,您无法在-L和〜/ lib之间添加空格。相反,您必须将其指定为相对路径或绝对路径。

除了libfwlib32.so.1.0.1文件之外,您是否检查过/ usr / local / lib(或/ usr / lib)中是否存在libfwlib32.so符号链接?

另一种可能性是库是错误的架构(即32位而你的系统是64位),但是ld应该打印一条关于跳过不兼容库的消息。您可以通过运行文件libfwlib32.so.1.0.1&#39;来检查库的体系结构。