我与MinGW存在链接问题.这些是电话:
g++ -enable-stdcall-fixup -Wl,-enable-auto-import
-Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows
-o debug/Simulation.exe debug/LTNetSender.o debug/main.o debug/simulation.o
debug/moc_simulation.o -L'c:/Programmieren/Qt/4.5.2/lib' -lmingw32
-lqtmaind -LC:\Programmieren\Qt\boost_1_39_0\distrib\lib
-LC:\Programmieren\MinGW\lib -llibboost_system-mgw34-mt -llibws2_32
-lQtSqld4 -lQtGuid4 -lQtNetworkd4 -lQtCored4
C:\Programmieren\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\
ld.exe: cannot find -llibws2_32
Run Code Online (Sandbox Code Playgroud)
MinGW库目录包含在库路径中,libws2_32.a位于此目录中.为什么链接器找不到库?
尝试在xcode 4中编译项目时出现以下错误(在xcode 3.x中正常工作)
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_FBSession", referenced from:
objc-class-ref in View1Controls.o
"_OBJC_CLASS_$_FBLoginDialog", referenced from:
objc-class-ref in View1Controls.o
"_OBJC_CLASS_$_FBRequest", referenced from:
objc-class-ref in View1Controls.o
"_OBJC_CLASS_$_FBStreamDialog", referenced from:
objc-class-ref in View1Controls.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释什么是错的?我确定我已经正确导入了头文件..
谢谢,
插口
我有这个代码
/////////////////////////////////////Gnome.cpp文件
#include "Living.h"
class Gnome:public Living{
private:
public:
Gnome();
void drawObjects();
};
Gnome::Gnome()
{
spriteImg = new Sprite("graphics/gnome.bmp"); //<-------------this is where it says there is the error
loaded = true;
}
Run Code Online (Sandbox Code Playgroud)
///////////////////////////////////Living.h file
#include <iostream>
#include "Sprite.h"
using namespace std;
class Sprite;
class Living{
protected:
int x,y;
static Sprite *spriteImg; //= NULL;
bool loaded;
void reset();
public:
Living();
~Living();
int getX();
void setX(int _x);
int getY();
void setY(int _y);
void virtual drawObjects() =0;
};
Run Code Online (Sandbox Code Playgroud)
// living.cpp
#include "Living.h"
Living::Living() …Run Code Online (Sandbox Code Playgroud) 我在VS2010中编写了以下代码片段:
#pragma once
#include "stdafx.h"
#ifndef SECURITY_WIN32
#define SECURITY_WIN32
#endif
#include "windows.h"
#include "sspi.h"
int main( void )
{
ULONG cPackages = 0;
PSecPkgInfo pInfo = NULL;
SECURITY_STATUS stat = EnumerateSecurityPackages(&cPackages, &pInfo);
if (stat == SEC_E_OK)
{
for (ULONG i = 0; i < cPackages; i++)
{
wprintf(L"%s\t%s\n",pInfo[i].Name, pInfo[i].Comment);
}
FreeContextBuffer(pInfo);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,在编译时我遇到以下错误:
错误LNK2019:函数_main中引用的未解析的外部符号_ imp _EnumerateSecurityPackagesW @ 8
和
错误LNK2019:函数_main中引用了未解析的外部符号_FreeContextBuffer @ 4
谁能帮帮我吗?

还有这个:
Ld /Users/davidraijmakers/Library/Developer/Xcode/DerivedData/Scanner-bbwbbvayxxnrhwdsgbkvibplofyw/Build/Products/Debug-iphoneos/Scanner.app/Scanner normal armv7
cd /Users/davidraijmakers/Documents/xcodezooi/Scanner
setenv IPHONEOS_DEPLOYMENT_TARGET 6.0
setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk -L/Users/davidraijmakers/Library/Developer/Xcode/DerivedData/Scanner-bbwbbvayxxnrhwdsgbkvibplofyw/Build/Products/Debug-iphoneos -L/Users/davidraijmakers/Documents/xcodezooi/Scanner/Scanner/ScanditSDK -F/Users/davidraijmakers/Library/Developer/Xcode/DerivedData/Scanner-bbwbbvayxxnrhwdsgbkvibplofyw/Build/Products/Debug-iphoneos -filelist /Users/davidraijmakers/Library/Developer/Xcode/DerivedData/Scanner-bbwbbvayxxnrhwdsgbkvibplofyw/Build/Intermediates/Scanner.build/Debug-iphoneos/Scanner.build/Objects-normal/armv7/Scanner.LinkFileList -dead_strip -fobjc-link-runtime -stdlib=libc++ -miphoneos-version-min=6.0 -liconv -lz -framework CoreVideo -framework AudioToolbox -framework AVFoundation -framework CoreMedia -framework QuartzCore -framework SystemConfiguration -framework UIKit -framework Foundation -framework CoreGraphics -lscanditsdk-iphone-2.2.5 -o /Users/davidraijmakers/Library/Developer/Xcode/DerivedData/Scanner-bbwbbvayxxnrhwdsgbkvibplofyw/Build/Products/Debug-iphoneos/Scanner.app/Scanner
Undefined symbols for architecture armv7:
"std::basic_ostream<char, std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
l1348 in libscanditsdk-iphone-2.2.5.a(mirasense.o)
l1486 in libscanditsdk-iphone-2.2.5.a(mirasense.o)
l1585 in libscanditsdk-iphone-2.2.5.a(mirasense.o)
l1600 in libscanditsdk-iphone-2.2.5.a(mirasense.o)
l1602 in …Run Code Online (Sandbox Code Playgroud) 我正在创建一个openGL引擎(ES 1.1的一侧和ES 2.0的一侧).两个引擎目前都有一些恒定的顶点(如下所示).不幸的是,在编译时我收到以下错误:
ld: 1 duplicate symbol for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation) with the duplicate symbol being _Verticies.
Run Code Online (Sandbox Code Playgroud)
为什么Xcode抱怨两个单独文件中的重复常量值?这些文件符合相同的协议......但大部分都是它们的连接.在C++中,此方法工作正常,但在转换为Objective-C时会引起注意到的错误.
//Define the positions and colors of two triangles
const Vertex Verticies[] = { //per vertex data
{{-0.5f, -0.866f},{1.0f, 1.0f, 0.5f, 1.0f}},
{{0.5f, -0.866f},{1.0f, 1.0f, 0.5f, 1.0f}},
{{0.0f, 1.0f},{1.0f, 1.0f, 0.5f, 1.0f}},
{{-0.5f, -0.866f},{0.5f, 0.5f, 0.5f, 0.0f}},
{{0.5f, -0.866f},{0.5f, 0.5f, 0.5f}},
{{0.0f, -0.4f},{0.5f, 0.5f, 0.5f}},
};
Run Code Online (Sandbox Code Playgroud)
解决方案:截至目前,似乎默认情况下,Objective-C中的const值受项目范围的影响,而不仅仅是文件的范围.在C++中,当创建const值时,范围自动限制在它所在的文件中.要在Objective-C中修复此问题,必须使用静态标记将范围限制为该特定文件.您也可以使用extern标签(但这会更多一点).
我正在编写一个3D图像引擎(它读取带有场景信息的XML并用openGL打印),用于大学,在visual studio中(不幸的是......),我正在做解析器atm,它将xml读入一个简单的树状数据结构.其中一个元素是Camera,在我添加数据结构的那部分之前,程序运行正常,但是在我添加它之后,我遇到以下错误:
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: virtual char const * __thiscall std::exception::what(void)const " (?what@exception@std@@UBEPBDXZ) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" (??0exception@std@@QAE@ABV01@@Z) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(_fpinit_.obj) : error LNK2005: __fltused already defined in a previous module
1>LIBCMT.lib(_fpinit_.obj) : error LNK2005: __ldused already …Run Code Online (Sandbox Code Playgroud) 我有一个包含可变参数模板和辅助函数的程序:
#include <iostream>
#include <string>
using std::cout;
template<typename... Ts>
void fooImpl(char const *cp, Ts... args);
template<typename... Ts>
inline void foo(const std::string &s, Ts... args)
{
fooImpl(s.c_str(), args...);
}
void fooImpl(char const *cp)
{
// do something
}
template<typename T, typename... Ts>
void fooImpl(char const *cp, T val, Ts... args)
{
char special{'@'};
while (*cp)
{
if (*cp == special)
{
// handle val ...
// recurse over remaining args
fooImpl(cp, args...);
return;
}
++cp;
}
}
int main()
{
std::string …Run Code Online (Sandbox Code Playgroud) 让我们假设我们有一个函数模板,它在cpp文件中实现,并提供了明确的实例化,如下所示:
function.h
template<typename T> void function(T val);
Run Code Online (Sandbox Code Playgroud)
function.cpp
#include "function.h"
template<typename T> void function(T val) { /* do something */ }
template void function<double>(double val);
Run Code Online (Sandbox Code Playgroud)
我们现在能够在包含function.h的主文件中调用该函数,如下所示:
double val = 1.0;
function(val);
Run Code Online (Sandbox Code Playgroud)
让我们进一步假设我们有一个类如下所示:
data.h
class Data
{
private:
double mVal;
public:
Data(double val) { mVal = val; }
operator double () { return mVal; }
};
Run Code Online (Sandbox Code Playgroud)
以下代码导致链接器错误LNK2019:unresolved external(Visual Studio 2010):
Data a(1.0);
function(a);
Run Code Online (Sandbox Code Playgroud)
我们可以使用以下表达式之一来提供一个 to function()
function<double>(a);
function(double(a));
...
Run Code Online (Sandbox Code Playgroud)
但为什么不能只调用函数(a)?如果没有使用类型Data 显式实例化function(),是否存在任何其他解决方案?
c++ templates linker-errors conversion-operator explicit-instantiation
我正在使用CMake 3.10,将已编译的库链接到CMake中的测试可执行文件时遇到问题。我进行了大量搜索,发现在早期版本中存在一个问题,您无法在结果可执行文件中链接中间库。我不知道这是否已解决还是一个问题。
我的CMake文件如下所示:
算法:
cmake_minimum_required (VERSION 3.9)
project(${MODULE_NAME}_core LANGUAGES CXX CUDA)
add_subdirectory("${core_impl_dir}" implementation)
set(cuda_src "parallel/ParallelComputation.cu")
set(cuda_hdr "parallel/ParallelComputation.h")
add_library(${PROJECT_NAME} STATIC "${cuda_src}" "${cuda_hdr}"
)
target_include_directories (${PROJECT_NAME} PUBLIC "include/"
"parallel/"
)
source_group("parallel" FILES "${cuda_src}" "${cuda_hdr}")
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${MODULE_NAME})
Run Code Online (Sandbox Code Playgroud)
测试:
project(${MODULE_NAME}_gtest LANGUAGES CXX CUDA)
add_subdirectory("${gtest_impl_dir}" implementation)
add_executable(${PROJECT_NAME} "${gtest_impl_src}")
target_link_libraries(${PROJECT_NAME} ${MODULE_NAME}_core)
enable_testing()
find_package(GTest REQUIRED)
include_directories("${GTEST_INCLUDE_DIRS}")
target_link_libraries(${PROJECT_NAME} ${GTEST_BOTH_LIBRARIES})
source_group("Implementation\\Source Files" FILES "${gtest_impl_src}" )
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${MODULE_NAME})
add_test(${PROJECT_NAME} ${PROJECT_NAME})
Run Code Online (Sandbox Code Playgroud)
仅构建Algo可以正常工作,但是同时构建Test时,出现链接错误,例如
../implementation/libmatrix1_testCuda_core.a(ParallelComputation.cu.o):在Funktion中'cudaError cudaMalloc(float **,unsigned long)':tmpxft_00005ad0_00000000-5_ParallelComputation.cudafe1.cpp :(。text + 0x4'4' '
使用make VERBOSE=1我得到此链接命令的编辑:
/ …