我在Visual Studio中遇到了一大堆链接器错误,我甚至没有直接调用这些方法.我白天是一名java开发人员,但我有一个我需要用C++做的项目,打算在Windows机器上运行.因此,我在使用Visual Studio时陷入困境.
基本上,我有一个os项目,我添加了一个访问器方法.我将该项目编译为.lib文件(编译和链接正常).
然后我有自己的项目使用该lib.我在Project-> Properties - > Linker - > Input下包含了库,并在General - > Additional Lib Directories中设置了相应的目录.我已经在相应的文件中包含了标题,我只是调用其中一个类的构造函数...甚至没有调用我创建的方法.
代码编译,但我得到以下大量的链接器错误 - 主要是LNK2019和LNK2001错误.我尝试在不同的设置(lib,exe等)下重新编译,并且链接器错误似乎只是相乘.当我切换回之前的设置时,错误的数量仍保持在最高点.任何想法如何解决这一问题?
构建日志
Build build:Project:SpamCapture,Configuration:Debug | Win32
命令行:
创建临时文件"c:\ SpamCapture\SpamCapture\SpamCapture\Debug\RSP0000103081740.rsp",内容为[/ VERBOSE:LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe"/ INCREMENTAL/LIBPATH: "C:\ SpamCapture\Config\Debug \"/ MANIFEST /MANIFESTFILE:"Debug\SpamCapture.exe.intermediate.manifest"/NODEFAULTLIB:"libcmtd.lib"/NODEFAULTLIB:"nafxcwd.lib"/ DEBUG/PDB:"c :\ SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.pdb"/ SUBSYSTEM:CONSOLE/MACHINE:X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32 .lib uuid.lib odbc32.lib odbccp32.lib
"\调试\ Interaction.obj"
"\调试\ InteractionSet.obj"
"\调试\ LogReader.obj"
"\调试\ SpamCapture.obj"
"\调试\ StdAfx.obj的"
"\调试\ SpamCapture.res"
".\ Debug\SpamCapture.exe.embed.manifest.res"]创建命令行"link.exe @c:\ SpamCapture\SpamCapture\SpamCapture\Debug\RSP0000103081740.rsp/NOLOGO/ERRORREPORT:PROMPT"
输出窗口:
链接...链接:警告LNK4067:模糊的切入点; 选择'mainCRTStartup'搜索库搜索C:\ SpamCapture\Config\Debug\KeyCapture_Config.lib:搜索C:\ Program Files\Microsoft Visual Studio 8\VC\lib\kernel32.lib:搜索C:\ Program …
我试图编写一个Visual C++ 2005例程来检查注册表中的某些键/值.使用c#编写代码没有问题,但我需要用C++编写代码.任何人都知道如何在vs2005中使用c ++来做到这一点.
非常感谢Tony
编辑:我可以运行相同的程序两次,同时没有任何问题 - 如何使用OpenMP或其他方法复制它?
这是问题的基本框架.
//Defined elsewhere
class SomeClass
{
public:
void Function()
{
// Allocate some memory
float *Data;
Data = new float[1024];
// Declare a struct which will be used by functions defined in the DLL
SomeStruct Obj;
Obj = MemAllocFunctionInDLL(Obj);
// Call it
FunctionDefinedInDLL(Data,Obj);
// Clean up
MemDeallocFunctionInDLL(Obj);
delete [] Data;
}
}
void Bar()
{
#pragma omp parallel for
for(int j = 0;j<10;++j)
{
SomeClass X;
X.Function();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经验证,当尝试释放某些内存时MemDeallocFunctionInDLL(),_CrtIsValidHeapPointer()断言失败.
这是因为两个线程都在写入同一个内存吗?
所以要解决这个问题,我认为我会 …
所以我想让读D读取这个内存位置并做一些工作.有什么想法吗?是编写调试器扩展的唯一方法 - 如果是这样,任何建议?
我考虑过执行内存转储到文件(仍然不知道如何,AFAIK我只能在窗口中查看内存)并让D处理文件,但是有更好的方法吗?
我想有一个wchar_t的数组.
以下作品:
char** stringArray;
int maxWords = 3;
stringArray = new char*[maxWords];
stringArray[0] = "I";
stringArray[1] = " Love ";
stringArray[2] = "C++"
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
wchar_t ** wcAltFinalText;
wcAltFinalText = new wchar_t *[MAX_ALT_SOURCE]; // MAX_ALT_SOURCE = 4
wcAltFinalText[0] = L'\0';
wcAltFinalText[1] = L'\0';
wcAltFinalText[2] = L'\0';
wcAltFinalText[3] = L'\0';
Run Code Online (Sandbox Code Playgroud)
我没有得到任何错误,但wcAltFinalText是一个糟糕的ptr
非常感谢任何帮助和评论.
我安装了Visual Studio 2005(带SP1)并将默认设置设置为C++所需的设置.
现在我打开一个解决方案并运行exe.在"工具"菜单项下,我选择"附加过程",然后将其附加到刚刚运行的exe上.我在代码中放置了几个断点(这个断点看起来已启用),这些断点应该被命中.但由于某种原因,我的断点没有被击中.
PS:所有pdb都存在于正确的位置.
有什么设置我错过了.
如何告诉编译器根据迭代次数或其他属性展开循环?或者,如何在Visual Studio 2005中启用循环展开优化?
编辑:例如
//Code Snippet 1
vector<int> b;
for(int i=0;i<3;++i) b.push_back(i);
Run Code Online (Sandbox Code Playgroud)
相反
//Code Snippet 2
vector<int> b;
b.push_back(0);
b.push_back(1);
b.push_back(2);
Run Code Online (Sandbox Code Playgroud)
push_back()是一个例子,我可以用任何可能需要很长时间的东西来替换它.
但我在某处读到了我可以使用代码1,如果循环满足某些条件,编译器可以将其展开到代码2.所以我的问题是:你是怎么做到的?关于哪一个更有效率已经讨论了SO,但是对此的任何评论都是值得赞赏的.
c++ compiler-construction visual-studio-2005 visual-c++-2005
有谁知道在Visual Studio 2005中使用什么版本的Boost Library?
我讨厌这些链接器错误,任何想法我怎么能摆脱它们?
Error 2 fatal error LNK1120: 1 unresolved externals C:\Users\**********\Documents\Visual Studio 2005\Projects\Machine2\Debug\Machine2.exe
Run Code Online (Sandbox Code Playgroud)
和
Error 1 error LNK2001: unresolved external symbol "public: void __thiscall SecondDlg::OnBnClickedButton4(void)" (?OnBnClickedButton4@SecondDlg@@QAEXXZ) SecondDlg.obj
Run Code Online (Sandbox Code Playgroud)