2

我在 Eclipse 中有两个 C++ 项目,“amp”和“amp_auditions”

首先创建一个库,C:\Users\Jared\EclipseWorkspace\amp\Debug\libamp.dll

第二个,一个测试程序 ( 'C:\Users\Jared\EclipseWorkspace\amp_auditions'),依赖于第一个,并且C:\Users\Jared\EclipseWorkspace\amp\Debug在 Project Properties > Library Dependencies 下列出了目录

要使用我创建的 amp 库,我认为我需要做的就是链接库文件并包含标题,但显然它并不那么简单。

一切都编译了,但是当我去调试时,应用程序立即终止。GDB 跟踪告诉我:

488,262 19^error,msg="During startup program exited with code 0xc0000135."

如果我直接在终端中运行测试程序,它会抱怨缺少依赖项。 如果我将libamp.dll文件放在C:\Users\Jared\EclipseWorkspace\amp_auditions目录中,一切正常。这告诉我这是调试器找不到的问题libamp.dll

我错过了什么?为什么我的测试程序不能在 Eclipse 调试透视图中运行?

gcc -v

COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.6.2 (GCC) 

gdb 跟踪:

487,988 2-environment-cd C:/Users/Jared/EclipseWorkspace/amp_auditions
487,991 2^done
487,991 (gdb) 
487,991 3-gdb-set breakpoint pending on
487,991 3^done
487,991 (gdb) 
487,992 4-gdb-set detach-on-fork on
487,992 4^done
487,992 (gdb) 
487,992 5-enable-pretty-printing
487,992 5^done
487,992 (gdb) 
487,992 6-gdb-set python print-stack none
487,993 6^done
487,993 (gdb) 
487,993 7-gdb-set print object on
488,003 7^done
488,003 (gdb) 
488,004 8-gdb-set print sevenbit-strings on
488,005 8^done
488,005 (gdb) 
488,005 9-gdb-set host-charset UTF-8
488,005 9^done
488,006 (gdb) 
488,006 10-gdb-set target-charset WINDOWS-1252
488,016 10^done
488,016 (gdb) 
488,017 11-gdb-set target-wide-charset UTF-16
488,017 11^done
488,017 (gdb) 
488,017 12source .gdbinit
488,027 &"source .gdbinit\n"
488,027 &".gdbinit: No such file or directory.\n"
488,027 12^error,msg=".gdbinit: No such file or directory."
488,027 (gdb) 
488,028 13-gdb-set target-async off
488,028 13^done
488,028 (gdb) 
488,029 14-gdb-set auto-solib-add on
488,029 14^done
488,029 (gdb) 
488,029 15-gdb-set solib-search-path C:\\Users\\Jared\\EclipseWorkspace\\amp\\Debug
488,029 15^done
488,029 (gdb) 
488,031 16-file-exec-and-symbols --thread-group i1 C:/Users/Jared/EclipseWorkspace/amp_auditions/Deb\
ug/amp_auditions.exe
488,065 16^done
488,065 (gdb) 
488,067 17-break-insert --thread-group i1 -t -f main
488,134 18-list-thread-groups
488,167 17^done,bkpt={number="1",type="breakpoint",disp="del",enabled="y",addr="0x004013ad",func="ma\
in()",file="..\\src\\amp_auditions.cpp",fullname="C:\\Users\\Jared\\EclipseWorkspace\\amp_auditions\\
\src\\amp_auditions.cpp",line="14",times="0",original-location="main"}
488,167 (gdb) 
488,167 18^done,groups=[{id="i1",type="process",executable="C:\\Users\\Jared\\EclipseWorkspace\\amp_\
auditions\\Debug\\amp_auditions.exe"}]
488,168 (gdb) 
488,172 19-exec-run --thread-group i1
488,205 =thread-group-started,id="i1",pid="3220"
488,205 =thread-created,id="1",group-id="i1"
488,205 ~"[New Thread 3220.0xa8c]\n"
488,205 19^running
488,205 *running,thread-id="all"
488,205 (gdb) 
488,206 20-list-thread-groups --available
488,260 =thread-exited,id="1",group-id="i1"
488,261 =thread-group-exited,id="i1"
488,262 19^error,msg="During startup program exited with code 0xc0000135."
488,262 (gdb) 
488,262 20^error,msg="Can not fetch data now."
488,263 (gdb) 
488,270 21-gdb-exit
488,293 21^exit
4

5 回答 5

5

我对这个问题的理解是,这与eclipse无关。.dll 在运行时动态链接。这意味着您正在运行的应用程序必须在系统路径或正在运行的可执行文件夹中找到库 (.dll)。

解决您当前问题的方法是将编译 .dll 的目录添加到您的 Windows 路径变量中。

于 2013-08-20T06:04:51.730 回答
1

您将测试应用程序和 DLL 构建到不同的文件夹。EXE 无法知道 DLL 在哪里。典型的解决方案是:

  1. 构建到同一个文件夹,例如“Bin”
  2. 复制 DLL 作为构建后步骤。
于 2013-08-20T11:02:11.493 回答
1

另一种选择是将 dll 的路径添加到LD_LIBRARY_PATH
在 Eclipse 的调试配置中(右键单击您的项目,调试为,调试配置)单击环境选项卡。单击新建...按钮并放置

Name:  LD_LIBRARY_PATH
Value: put the absolute path to your dll here. Separate multiple paths with a ";"

在 Mac OS X 上,它称为DYLD_LIBRARY_PATH
在基于 Linux 的系统上,您可以在同一命令中临时定义变量,如下所示:

bash$ LD_LIBRARY_PATH=/path/to/libs ./executable

我不确定如何在 Windows 中执行此操作。
仔细检查您的库的路径是否正确!

于 2014-10-21T16:07:39.020 回答
1

另一个简单的选项是在 Eclipse 中配置 Run->Debug Configurations:在那里,展开 C/C++ Application,选择您的 Debug 应用程序,然后在右侧的“Debugger”选项卡中单击“Shared Libraries”选项卡并添加共享库的路径。

于 2014-12-09T16:35:31.390 回答
1

对于其他寻找解决方案的人:

运行配置允许您设置 PATH。在这里您可以添加自己的设置,而无需修改系统环境(还)。我有时会忘记这一点,并遇到您描述的完全相同的问题。在此处添加路径可以解决问题。

于 2016-07-08T07:39:07.933 回答