Eclipse / CDT无法调试具有链接依赖项的应用程序 - 程序退出代码为0xc0000135

时间:2013-08-20 04:31:24

标签: c++ eclipse dll eclipse-cdt

我在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。图书馆依赖

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

所有内容都会编译,但是当我去调试时,应用程序会立即终止。 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 trace:

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

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

  1. 构建到同一文件夹,例如“Bin”
  2. 将DLL复制为构建后步骤。

答案 2 :(得分:1)

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

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中执行此操作。
仔细检查您的库的路径是否正确!

答案 3 :(得分:1)

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

答案 4 :(得分:0)

寻找解决方案的其他人:

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