标签: linker-errors

将NSString*数组声明为全局extern时Xcode中的错误和警告

我在类的头文件中声明了一个NSString*数组.
PolygonShape.h

NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon", ...};
Run Code Online (Sandbox Code Playgroud)

现在我在PolyginShape.m中使用它如下:

- (NSString*) name {
return (POLYGON_NAMES [self.numberOfSides]);
}
Run Code Online (Sandbox Code Playgroud)

numberOfSides是一个iVar,它将指示存储多边形名称的索引
到目前为止很好......它正在编译而没有任何错误

然后我在我的文件中添加了PolygonShape.h来实现main方法(注意:这些没有任何类定义和调用函数C-Style而不是obj-c Style)

#import "PolygonShape.h"
Run Code Online (Sandbox Code Playgroud)

现在,当我编译时,我得到一个构建(链接)错误

ld: duplicate symbol _POLYGON_NAMES in /Users/../Projects/CS193P/1B/What_A_Tool/build/What_A_Tool.build/Debug/What_A_Tool.build/Objects-normal/i386/PolygonShape.o and /Users/../Projects/CS193P/1B/What_A_Tool/build/What_A_Tool.build/Debug/What_A_Tool.build/Objects-normal/i386/What_A_Tool.o
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

所以我通过堆栈溢出和其他论坛,大多数建议是使全局变量extern,所以我做...

extern NSString* POLYGON_NAMES[] = {@"Invalid Polygon", @"Monogon" .. };
Run Code Online (Sandbox Code Playgroud)

但是我现在仍然收到链接错误,并且现在也收到2个警告

warning: 'POLYGON_NAMES' initialized and declared 'extern'
Run Code Online (Sandbox Code Playgroud)

在我导入PolygonShape.h的两个地方

我在这里错过了什么?

谢谢.

global-variables objective-c linker-errors extern

4
推荐指数
1
解决办法
4832
查看次数

当我在c中编译程序时,为什么会得到一个未定义的引用(例如`glColor3f')?

我正在编译一个在ubuntu(linux)中使用opengl的示例程序.代码的简短片段如下:

 #include <stdlib.h> 

 #include <GL/glut.h>


 void createBox( GLfloat centroX, GLfloat centroY,
                       GLfloat corR, GLfloat corG, GLfloat corB )
 {
    /* Cor  */

    glColor3f( corR, corG, corB );
Run Code Online (Sandbox Code Playgroud)

我安装了所有的包在opengl(在ubuntu中)开发,即:

freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa
libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev
Run Code Online (Sandbox Code Playgroud)

我像这样编译示例:

gcc -lGL   CG_ex04.c -o main
Run Code Online (Sandbox Code Playgroud)

我得到以下内容

/tmp/ccDWmJDZ.o: In function `createBox':
CG_ex04.c:(.text+0x31): undefined reference to `glColor3f'
Run Code Online (Sandbox Code Playgroud)

和沿同一行的其他错误.

有谁知道我做错了什么?

Thanx提前提供任何帮助.

c gcc linker-errors

4
推荐指数
1
解决办法
3939
查看次数

错误LNK2001:未解析的外部符号__imp__PathRemoveFileSpecA @ 4

我用我的备份程序用vc6.0编程.我包括了shlwapi.h,windows.h,我使用了PathStripPath函数和PathRemoveFileSpec函数.

当我遵守这条消息时就出来了.

BlackDlg.obj : error LNK2001: unresolved external symbol __imp__PathStripPathA@4
BlackDlg.obj : error LNK2001: unresolved external symbol __imp__PathRemoveFileSpecA@4
Run Code Online (Sandbox Code Playgroud)

我删除了我的代码中的用法,这条消息没有来.谢谢你快进.

c++ linker-errors visual-c++

4
推荐指数
1
解决办法
7678
查看次数

Apple Mach-O链接器错误

我正在尝试将Twitter集成到我的应用程序中,并不断收到以下错误.谢谢你的帮助.

"_OBJC_CLASS _ $ _ TWTweetComposeViewController",引用自:预览ViewController.o中的objc-class-ref ld:未找到架构armv7 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

twitter linker-errors ios5

4
推荐指数
1
解决办法
4043
查看次数

其他链接器标志设置为-ObjC

我在Build Settings中包含了设置为-ObjC的Other Linker Flags,因为我想使用一个需要它的框架(https://github.com/rs/SDWebImage)

但是在添加此标志后,我收到链接器错误:

Undefined symbols for architecture armv7:
Run Code Online (Sandbox Code Playgroud)

"_OBJC_CLASS _ $ _ SKProductsRequest",引自:

  objc-class-ref in Parse(PFPurchase.o)
Run Code Online (Sandbox Code Playgroud)

"_OBJC_CLASS _ $ _ SKPayment",引自:

  objc-class-ref in Parse(PFPurchase.o)
Run Code Online (Sandbox Code Playgroud)

"_OBJC_CLASS _ $ _ SKPaymentQueue",引自:

  objc-class-ref in Parse(PFPurchase.o)

  objc-class-ref in Parse(PFPaymentTransactionObserver.o)
Run Code Online (Sandbox Code Playgroud)

ld:找不到架构armv7的符号

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

删除-ObjC链接器标志并再次构建项目而不会出现错误.任何关于事业的想法?谢谢.

objective-c linker-errors ios

4
推荐指数
2
解决办法
5196
查看次数

(目标 - )C++模板专业化上的重复符号

好吧,自昨天以来,我一直在努力解决这个奇怪的错误,所以我想是时候向社区提问了......

我目前正在使用Objective-C++,我在头文件中有一个纯粹的C++类声明,如下所示:

#ifndef __MATRIX_H__
#define __MATRIX_H__

#define USE_NEON_UPSAMPLING2X true
#define USE_NEON_THRESHOLD true

typedef float OCRfloat;

template<class T = OCRfloat>
class Matrix {

public:
    ...

    Matrix threshold(T thresholdValue) const;

    ...

    Matrix upsample2x() const;

    ...
};

#ifdef TARGET_OS_IPHONE

#if USE_NEON_UPSAMPLING2X
template<> Matrix<float> Matrix<float>::upsample2x() const;
#endif

#if USE_NEON_THRESHOLD
template<> Matrix<float> Matrix<float>::threshold(float thresholdValue) const;
#endif

#endif

#include "Matrix.cpp"

#endif
Run Code Online (Sandbox Code Playgroud)

它是模板类,具有基本矩阵运算,但是,我希望通过T = float上的模板特化来优化一些瓶颈.我有包含的Matrix.cpp文件,如下所示:

#include <iostream>
#include <cmath>

#if defined TARGET_OS_IPHONE
#include <Accelerate/Accelerate.h>
#endif

...

template<class T> Matrix<T> Matrix<T>::threshold(T thresholdValue) const {
   ... // …
Run Code Online (Sandbox Code Playgroud)

c++ xcode templates linker-errors objective-c++

4
推荐指数
2
解决办法
2440
查看次数

编译时出错"未定义引用`sin'"(使用-lm)

我已下载并编译:http://leenissen.dk/fann/wp/

  • cmake版本2.8.11.2
  • gcc(Ubuntu/Linaro 4.8.1-10ubuntu8)4.8.1

用于编译的命令:

cmake -D CMAKE_INSTALL_PREFIX:PATH=/usr .
Run Code Online (Sandbox Code Playgroud)

安装:

sudo make && sudo make install
Run Code Online (Sandbox Code Playgroud)

然后我转到fann项目中的examples /目录并尝试通过运行编译示例:

make all
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

gcc -O3 xor_train.c -o xor_train -lfann -lm
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `exp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `cos'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `log'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `pow'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sqrt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `floor'
collect2: error: ld returned 1 exit status
make: *** [xor_train] Error 1
Run Code Online (Sandbox Code Playgroud)

更新:

  • 我遵循了图书馆的指示 …

c gcc cmake linker-errors fann

4
推荐指数
1
解决办法
5551
查看次数

const char的多重定义*

我得到了全局的上述消息链接器错误

const char* HOST_NAME = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)

我不认为我已经编译了两次文件,但这里是我对文件的定义.

main.cpp中

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include "connection.hpp"
Run Code Online (Sandbox Code Playgroud)

connection.cpp

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <arpa/inet.h>
#include "connection.hpp"
Run Code Online (Sandbox Code Playgroud)

connection.hpp

#ifndef __connection__
#define __connection__
#include <unistd.h>
#include <netinet/in.h>

const int BUFFSIZE = sysconf(_SC_PAGESIZE);             //Define page size
const char* HOST_NAME = "127.0.0.1";                    //Local host
//Definition of a class
#endif
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

c++ linker-errors multiple-definition-error

4
推荐指数
1
解决办法
6591
查看次数

找不到-llib的库.(clang:错误:链接器命令失败,退出代码为1(使用-v查看调用))

我正在开发一个以前完成并上传到app store的项目.当我在Xcode 5.0中运行这个应用程序时,它工作正常,但是当我在Xcode版本5.1.1(5B1008)上运行时,我在两个设备上都收到链接器错误和模拟器.

错误消息 - 找不到-llib的库.(clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)).

我已经搜索了很多,但我没有得到任何关于Library not found for -llib错误的线索.有什么我必须在构建设置中更改来解决这个问题吗?

xcode clang linker-errors ios

4
推荐指数
1
解决办法
8425
查看次数

错误:对'_jstring * QAndroidJniObject :: callStaticMethod &lt;_jstring *&gt;(char const *,char const *)'的未定义引用

我正在尝试使用QAndroidJniObject。作为测试,我只调用2个Java函数,一个返回一个int,另一个返回一个字符串。

返回int时,此代码可正常编译:

jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其更改为调用返回字符串的函数,它将失败:

jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");
Run Code Online (Sandbox Code Playgroud)

它失败了

错误:对'_jstring * QAndroidJniObject :: callStaticMethod <_jstring *>(char const *,char const *)'的未定义引用

既然QAndroidJniObject::callStaticMethod是模板函数,那么如何为一种类型定义它却为另一种类型定义它呢?

编辑:其实,我只是测试jobjectjbyteArrayjbooleanArrayjbytejboolean,等,这是我发现了什么-只有整数类型,如jshortjintjlongjboolean工作,同时字符串,数组和对象都给出一个undefined reference错误。

c++ qt android linker-errors qtandroidextras

4
推荐指数
1
解决办法
1566
查看次数