我有作业写自己的抽象类Vector.我做了一些代码,但是当我尝试编译它时,我有错误.这是代码:
vector.hh:
#ifndef VECTOR__HH__
#define VECTOR__HH_
template<class T> class Vector {
int capacity_;
int size_;
T* buffer_;
void ensure_capacity(unsigned size);
public:
Vector(int capacity=10)
: capacity_(capacity), size_(0), buffer_(new T[capacity])
{ }
~Vector() {
delete []buffer_;
}
int size() const {
return size_;
}
bool empty() const {
return size_ == 0;
}
T& operator[](int n) {
return buffer_[n];
}
const T& operator[](int n) const {
return buffer_[n];
}
void clear() {
// TODO
}
int capacity() const {
return capacity_; …Run Code Online (Sandbox Code Playgroud) 我有一个cpp静态库,并尝试将其包装在一个静态的obj-c库中,以便它从外部看起来像一个普通的obj-c lib.我的obj-c lib编译得很好,但是当我尝试在App中使用这个lib时,我得到以下链接器错误:
Apple Mach-O Linker (Id) Error
Undefined symbols for architecture i386:
"operator new(unsigned long)", referenced from:
...
Run Code Online (Sandbox Code Playgroud)
所有libs都可以在每个需要的架构中编译好.
我的包装器lib看起来像这样:
ObjcLib.h
@interface ObjcLib: NSObject{
}
- (void) doSomething:(NSString*)text;
@end
Run Code Online (Sandbox Code Playgroud)
ObjcLib.mm
#import "ObjcLib.h"
#import "apiFromCppLib.h"
@interface ObjcLib (){
@private
cppApiNamespace::BaseApi* api;
}
@end
@implementation ObjcLib
- (void) doSomething:(NSString*)text{
api = new cppApiNamespace::BaseAPI();
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我在Link Binary With Libraries下添加了ObjcLib.a.库搜索路径也是正确的,但是当我尝试用[ObjcLib alloc]创建一个对象时,我得到了上面提到的链接器错误.我正在使用XCode4和LLVM编译器3.0
希望任何人都可以给我一个提示可能是错误的提示,或者我的包装是否正确.
编辑:在应用程序的构建设置中添加-lstdc ++作为其他链接器标志解决了许多链接器错误,但不是全部.解决的问题是ObjcLib.h和ObjcLib.mm中的cpp命令.保留的是来自BaseAPI的一些方法调用.我们将仔细研究一下这个方法调用与正确链接的其他方法的不同之处.
我有一个类,我希望有一个静态成员,它是一个结构.
例如:.h文件:
typedef struct _TransactionLog
{
string Reference;
vector<int> CreditLog;
int id;
}TransactionLog;
class CTransactionLog {
static TransactionLog logInfo;
public:
static void Clear();
static TransactionLog getLog();
};
Run Code Online (Sandbox Code Playgroud)
.cpp文件:
void CTransactionLog::Clear()
{
logInfo.Reference = "";
logInfo.CreditLog.clear();
logInfo.id = 0;
}
TransactionLog CTransactionLog::getLog()
{
return logInfo;
}
Run Code Online (Sandbox Code Playgroud)
我明白了
描述资源路径位置类型
未定义的对"CTransactionLog :: logInfo"TransactionLog.cpp的引用
有人可以举个例子来说明如何使这项工作成功吗?拥有一个静态成员是一个struct(带有stl成员),使用静态成员方法对其进行操作,并在代码的其他几个部分中包含此头.这应该用于通过应用程序添加日志记录.
我正在尝试制作我的第一个Windows窗体应用程序.我正在尝试建立SQL连接,所以我插入了我的SQL函数,它在控制台应用程序中完美运行.我重写了一点,但是现在,我收到链接器错误,我不知道为什么.
有人可以帮助我,我做错了什么?
谢谢!
误差修改:
Error 3 error LNK2028: unresolved token (0A000023) "extern "C" short __stdcall SQLGetData(void *,unsigned short,short,void *,long,long *)" (?SQLGetData@@$$J224YGFPAXGF0JPAJ@Z) referenced in function "private: bool __clrcall Test_WindowsForm::Form1::ExecuteSQLCommand(void)" (?ExecuteSQLCommand@Form1@Test_WindowsForm@@$$FA$AAM_NXZ) Test_WindowsForm.obj
Error 4 error LNK2028: unresolved token (0A000024) "extern "C" short __stdcall SQLFetch(void *)" (?SQLFetch@@$$J14YGFPAX@Z) referenced in function "private: bool __clrcall Test_WindowsForm::Form1::ExecuteSQLCommand(void)" (?ExecuteSQLCommand@Form1@Test_WindowsForm@@$$FA$AAM_NXZ) Test_WindowsForm.obj
Error 5 error LNK2028: unresolved token (0A000025) "extern "C" short __stdcall SQLRowCount(void *,long *)" (?SQLRowCount@@$$J18YGFPAXPAJ@Z) referenced in function "private: bool __clrcall Test_WindowsForm::Form1::ExecuteSQLCommand(void)" (?ExecuteSQLCommand@Form1@Test_WindowsForm@@$$FA$AAM_NXZ) Test_WindowsForm.obj
Error 6 error …
考虑使用以下头文件(c ++): myclass.hpp
#ifndef MYCLASSHPP_
#define MYCLASSHPP_
namespace A {
namespace B {
namespace C {
class myclass { /* Something */ };
myclass& operator+(const myclass& mc, int i);
}}}
#endif
Run Code Online (Sandbox Code Playgroud)
考虑实现文件: myclass.cpp
#include "myclass.hpp"
using namespace A::B::C;
myclass& operator+(const myclass& mc, int i) {
/* Doing something */
}
Run Code Online (Sandbox Code Playgroud)
考虑主文件: main.cpp
#include "myclass.hpp"
int main() {
A::B::C::myclass el = A::B::C::myclass();
el + 1;
}
Run Code Online (Sandbox Code Playgroud)
好吧,链接器告诉我有一个未定义的引用 A::B::C::operator+(A::B::C::myclass const&, int)
这有什么问题?
我已经在这个代码上工作了好几个小时,这让我发疯了!
整个来源是http://pastebin.com/Urxh68W4,但我很确定我知道这个问题.
extern "C" NTSYSAPI LONG NTAPI ZwUnmapViewOfSection(HANDLE, PVOID);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
Error 1 error LNK2019: unresolved external symbol __imp__ZwUnmapViewOfSection@8 referenced in function _wWinMain@16
Run Code Online (Sandbox Code Playgroud)
我猜我应该包含一些dll或库,所以我将Ntoskrnl.lib添加到我的项目中,因为它包含ZwUnmapViewOfSection函数.
我完全不知道该怎么做.我应该使用Ntdll.dll吗?如果是这样,我怎么连链接?我以为你只能使用Visual Studio 2010中的库.
另外,NTSYSAPI和NTAPI究竟是什么?网上几乎没有任何信息.
当我构建并运行我的项目时,我得到的唯一错误,结果是Apple Mach-O链接器错误
架构i386的20个重复符号
链接器命令失败,退出代码为1(使用-v查看调用)
问题是我检查了项目中任何重复的类文件,图片,音频文件的存在(不是任何).我已将所有.m文件导入构建阶段 - >编译源.还有与二进制库链接导入的正确框架,并检查图片,xib,音频文件是否已在复制包资源中正确导入,到目前为止一切看起来都不错.但是,当我尝试运行项目时,链接器错误仍然存在.谁能告诉我哪里出错了?
Ld /Users/User/Library/Developer/Xcode/DerivedData/Taukytable-bwphmaegucpyjhfinxfulunsuhag/Build/Products/Debug-iphonesimulator/Taukytable.app/Taukytable normal i386
cd "/Users/User/Desktop/Taukytable Newone"
setenv IPHONEOS_DEPLOYMENT_TARGET 6.0
setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.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 i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk -L/Users/User/Library/Developer/Xcode/DerivedData/Taukytable-bwphmaegucpyjhfinxfulunsuhag/Build/Products/Debug-iphonesimulator -F/Users/User/Library/Developer/Xcode/DerivedData/Taukytable-bwphmaegucpyjhfinxfulunsuhag/Build/Products/Debug-iphonesimulator -filelist /Users/User/Library/Developer/Xcode/DerivedData/Taukytable-bwphmaegucpyjhfinxfulunsuhag/Build/Intermediates/Taukytable.build/Debug-iphonesimulator/Taukytable.build/Objects-normal/i386/Taukytable.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -stdlib=libc++ -mios-simulator-version-min=6.0 -framework CoreAudio -framework CoreMedia -framework CoreFoundation -framework Accelerate -framework CoreData -framework CoreVideo -framework Security -framework CoreImage -framework MessageUI -framework MobileCoreServices -framework AVFoundation -framework QuartzCore -framework SystemConfiguration -framework OpenGLES -framework AssetsLibrary -lsqlite3.0 -framework AudioToolbox -framework UIKit …Run Code Online (Sandbox Code Playgroud) 我只想从openGL编程开始,所以我从ubuntu的存储库安装了freeglut3,我安装了所有的mesa软件包,以及build-essentials.
后来,我复制的一个简单的例子openGL的维基
在第一,我试图编译它:gcc triangle.c -o triangle.o;
但是,稍后,我在这里阅读:链接器错误:未定义引用符号'glOrtho',我必须将库链接到-l.
所以,我尝试过gcc triangle.c -lglut -lGL -Wall -o triangle.o
两者都返回相同的错误:
/tmp/ccKLT4ac.o: In function `main':
triangle.c:(.text+0x2b): undefined reference to `glutInit'
triangle.c:(.text+0x37): undefined reference to `glutInitDisplayMode'
triangle.c:(.text+0x4b): undefined reference to `glutInitWindowSize'
triangle.c:(.text+0x57): undefined reference to `glutCreateWindow'
triangle.c:(.text+0x5c): undefined reference to `glewInit'
triangle.c:(.text+0x73): undefined reference to `glewGetErrorString'
triangle.c:(.text+0xaa): undefined reference to `glutDisplayFunc'
triangle.c:(.text+0xaf): undefined reference to `glutMainLoop'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我试图包含gl.h和glu.h库,尝试使用cpp中的许多不同的示例程序,......以及许多组合.所有返回类似的错误.
啊,在/ usr/include我有所有的库:
akronix@ASJ-Netbook:~$ ls /usr/include/GL
freeglut_ext.h glext.h …Run Code Online (Sandbox Code Playgroud) 我有const char * FILENAME = "a/file/name"两个.cpp文件中定义的变量,名为a.cpp和b.cpp.没有任何内容直接包含这些文件,它们只包含a.h和b.h分别包含在自身中.然后包含这两个头文件main.cpp
我的问题是我收到以下链接器错误:
a.obj : error LNK2005: "char const * const FILENAME" (?FILENAME@@3PBDB) already defined in b.obj
我不经常使用文件范围变量,所以我认为这样就可以了......我在这里做错了什么?
我试图用一个简单的例子来使用Boost.Timer进行一些秒表性能测量,我无法弄清楚为什么我无法将Boost.Timer成功链接到Boost.Chrono.我使用以下简单脚本从源代码构建了boost
.\b2 --clean
CALL bootstrap
.\b2 --build-type=complete address-model=64
Run Code Online (Sandbox Code Playgroud)
但仍然最终得到链接器错误.
70>libboost_timer-vc100-mt-1_49.lib(cpu_timer.obj) : error LNK2001: unresolved external symbol "public: static class boost::chrono::time_point<class boost::chrono::steady_clock,class boost::chrono::duration<__int64,class boost::ratio<1,1000000000> > > __cdecl boost::chrono::steady_clock::now(void)" (?now@steady_clock@chrono@boost@@SA?AV?$time_point@Vsteady_clock@chrono@boost@@V?$duration@_JV?$ratio@$00$0DLJKMKAA@@boost@@@23@@23@XZ)
Run Code Online (Sandbox Code Playgroud)
是否有必要实际包含--with-chrono使用Timer类的标志?在Timer 文档中找不到任何相关内容虽然Thread 文档似乎提到了我从这个问题引出的更多内容,这些内容提示了一些链接修复的顺序.
这有点令人困惑,因为我看到组件已经构建并准备通过项目设置链接到Visual Studio中Linker->General->Additional Library Directories.我认为Boost的设计在处理这些特定库时并不明显.任何人都可以评论这个吗?是什么处理--with-chrono/ USES_CHRONO宏,它似乎不会阻止库的构建,所以有条件地编译一些代码,特别是time_point类?
我认为根据表30.1.在线程文档中〜可配置功能的默认值" USES_CHRONO默认为是,所以我应该启用这些功能吗?
C:\...\boost_binaries\msvc10_x64>dir /b | findstr /i chrono
boost_chrono-vc100-mt-1_49.dll
boost_chrono-vc100-mt-1_49.lib
boost_chrono-vc100-mt-gd-1_49.dll
boost_chrono-vc100-mt-gd-1_49.lib
libboost_chrono-vc100-mt-1_49.lib
libboost_chrono-vc100-mt-gd-1_49.lib
libboost_chrono-vc100-mt-s-1_49.lib
libboost_chrono-vc100-mt-sgd-1_49.lib
libboost_chrono-vc100-s-1_49.lib
libboost_chrono-vc100-sgd-1_49.lib
C:\...\boost_binaries\msvc10_x64>dir /b | findstr /i timer
boost_timer-vc100-mt-1_49.dll
boost_timer-vc100-mt-1_49.lib
boost_timer-vc100-mt-gd-1_49.dll
boost_timer-vc100-mt-gd-1_49.lib
libboost_timer-vc100-mt-1_49.lib
libboost_timer-vc100-mt-gd-1_49.lib …Run Code Online (Sandbox Code Playgroud)