所以我的程序运行正常.编译,链接,运行,工作.然后,我决定在我的一个文件中添加一个简单的函数,如下所示:
#ifndef UTILITY_HPP
#define UTILITY_HPP
/* #includes here. There's no circular include, I've checked. */
namespace yarl
{
namespace utility
{
(several function declarations and definitions)
bool isVowel(const char c)
{
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
return true;
else return false;
}
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
该函数定义是我对代码所做的唯一更改.其他一切与现在完全一样.什么都没有叫它.我编译,它无法链接,g ++为#includes这个文件的每个文件提供了这些错误之一:
./obj/Feature.o: In function `yarl::utility::isVowel(char)':
/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src/Utility.hpp:130: multiple definition of `yarl::utility::isVowel(char)'
./obj/Events.o:/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src /Utility.hpp:130: first defined here
./obj/GameData.o: …Run Code Online (Sandbox Code Playgroud) 首先,我在编程中只使用了Objective-c方法.我决定做几个快速的数学计算作为c函数,然后最终需要它们用于多个类.所以我把c函数放在一个单独的.h文件中.这工作正常,直到我尝试将.h文件导入多个类.然后我收到这个错误:
重复符号*_myFunction*blah blah blah链接器命令失败,退出代码为1(使用-v查看调用)
如何在没有此链接错误的情况下在多个类中使用ac函数.我试过在我需要的类中定义函数,但似乎即使它们是不同的类,如果函数名相同,我也会得到这个错误.我在这里可能很疯狂,但有些帮助理解会很棒.
我正在使用XCTest和Xcode 5进行单元测试.一切都工作得很好,但随后一位同事推动了,它似乎打破了它.
我做了以下事情:
BUNDLE_LOADER = $(BUILT_PRODUCTS_DIR)/ app name.app/app
TEST_HOST = $(BUNDLE_LOADER)
我无休止地玩弄了构建路径.
这是我得到的错误,它与Linker-O错误有关.
-bundle_loader只能与-bundle一起使用
有人知道怎么修这个东西吗?
我有一个链接错误,其中链接器抱怨我的具体类的析构函数正在调用其抽象的超类析构函数,其代码缺失.
这是在XCode的Mac OS X上使用GCC 4.2.
我看到了g ++未定义的对typeinfo的引用,但它并不完全相同.
这是链接器错误消息:
Undefined symbols:
"ConnectionPool::~ConnectionPool()", referenced from:
AlwaysConnectedConnectionZPool::~AlwaysConnectedConnectionZPool()in RKConnector.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
这是抽象基类声明:
class ConnectionPool {
public:
static ConnectionPool* newPool(std::string h, short p, std::string u, std::string pw, std::string b);
virtual ~ConnectionPool() =0;
virtual int keepAlive() =0;
virtual int disconnect() =0;
virtual sql::Connection * getConnection(char *compression_scheme = NULL) =0;
virtual void releaseConnection(sql::Connection * theConnection) =0;
};
Run Code Online (Sandbox Code Playgroud)
这是具体的类声明:
class AlwaysConnectedConnectionZPool: public ConnectionPool {
protected:
<snip data members> …Run Code Online (Sandbox Code Playgroud) 我一直在使用agvtool我的iPhone应用程序的一般原则,并且最近找到了我想能够检查版本变量的原因(以便我可以将帮助内容重新复制到Documents目录中,如果它已经出来日期).MyAppVersionNumber在MyApp_vers.c中定义的变量在构建期间自动生成.它是在.o文件中生成的,并显示在链接应用程序本身的(以前的版本?)中.到目前为止,这似乎很好.
所以现在我已经extern double MyAppVersionNumber在.m文件中声明了我需要使用它(后来尝试使用它,只是在一个NSLog语句中开始),我尝试为iPhone模拟器构建,并得到一个链接错误:
"_MyAppVersionNumber", referenced from:
_MyAppVersionNumber$non_lazy_ptr in HelpViewController.o
(maybe you meant: _MyAppVersionNumber$non_lazy_ptr)
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
那么,我需要做些什么来让这个链接?
我用google搜索了$ non_lazy_ptr和agvtool,并且什么也没有得到,只有$ non_lazy_ptr,它提供了一些东西,但主要是应用于库,这不是,真的(是吗?).到目前为止,在我的挖掘中,我还没有出现一个关于agvtool的页面,它实际上讨论了使用变量的任何细节 - 我读过的那些只是随便说出来的一个extern变量,我已经完成了.
有人熟悉这个,和/或能否提供任何帮助?
谢谢!
struct A
{
virtual void foo(); // unused and unimplemented
virtual void bar () {}
};
int main ()
{
A obj; // ok
obj.bar(); // <-- added this edition
A* pm = (A*)malloc(sizeof(A)); // ok
A* pn = new A; // linker error
}
Run Code Online (Sandbox Code Playgroud)
对于堆栈上的对象,它工作正常.但是对于堆上的分配new(不malloc),它会给出链接器错误:
undefined reference to `vtable for A'
Run Code Online (Sandbox Code Playgroud) 我正在尝试为ATmega328 micro编译一些代码,我想使用Arduino的库和核心.我正在使用CMake.我已经编译了核心库以及我的代码的所有对象和Arduino的库.但是当它链接时,它们会向我显示以下错误.
..."重定位被截断以适合:R_AVR_13_PCREL对象"......"avr5/libgcc.a"......
我通过谷歌发现这是一个常见的错误,但没有任何解决方案对我有用.我唯一不能做的是在链接器句子的末尾加上"-lm"和"-lc"标志,因为我不知道如何用CMake做到这一点.
编辑:我已经尝试使用makefile编译它,但我得到了相同的结果,甚至在链接器句子的末尾加上"-lm"和"-lc"标志.
我把Makefile和CMake文件放在这里:
CMakeList.txt主CMake文件
cmake_minimum_required(VERSION 2.6)
Project(IMU)
set(ARDUINO_PROCESSOR atmega328p)
set(ARDUINO_PROCESSOR_FREQ 1600000L)
include(./arduino.cmake)
add_library(ardlib
libraries/EEPROM/EEPROM.cpp
libraries/Wire/utility/twi.c
libraries/Wire/Wire.cpp
libraries/HMC58X3/HMC58X3
)
LINK_DIRECTORIES(${IMU_SRC_DIR}/libarduinocore
${IMU_SRC_DIR}/libraries/EEPROM
${IMU_SRC_DIR}/libraries/Wire
${IMU_SRC_DIR}/libraries/HMC58X3
)
link_libraries(arduinocore ardlib)
include_directories(
libarduinocore
libraries/EEPROM
libraries/Wire
libraries/Wire/utility
libraries/HMC58X3
)
set(C_SRCS
ADXL345.cpp
ApplicationRoutines.cpp
DCM.cpp
HMC5883L.cpp
ITG3200.cpp
matrix.cpp
output.cpp
timing.cpp
vector.cpp
)
set(C_HDRS
ADXL345.h
ApplicationRoutines.h
DCM.h
HMC5883L.h
ITG3200.h
matrix.h
output.h
timing.h
vector.h
declarations.h
)
add_executable(IMU.elf main.cpp ${C_SRCS} ${C_HDRS})
add_subdirectory(libarduinocore)
Run Code Online (Sandbox Code Playgroud)
arduino.cmake.这是由CMakeList.txt导入的:
set(ARDUINO_PROCESSOR atmega328p)
set(ARDUINO_PROCESSOR_FREQ 16000000L)
# This module defines macros …Run Code Online (Sandbox Code Playgroud) 我遇到的问题在这里得到了解决: 在open-mpi/mpi-run中加载共享库
当我的安装本身指定必要的-L参数时,我不知道如何设置LD_LIBRARY_PATH或指定-x LD_LIBRARY_PATH修复问题.我的安装在~/mpi/
我还包括了我的编译链接配置.
$ mpic++ -showme:version
mpic++: Open MPI 1.6.3 (Language: C++)
$ mpic++ -showme
g++ -I/home/vigneshwaren/mpi/include -pthread -L/home/vigneshwaren/mpi/lib
-lmpi_cxx -lmpi -ldl -lm -Wl,--export-dynamic -lrt -lnsl -lutil -lm -ldl
$ mpic++ -showme:libdirs
/home/vigneshwaren/mpi/lib
$ mpic++ -showme:libs
mpi_cxx mpi dl m rt nsl util m dl % Notice mpi_cxx here %
Run Code Online (Sandbox Code Playgroud)
当我编译mpic++ <file>并运行时,mpirun a.out我得到了一个(共享库)链接器错误
error while loading shared libraries: libmpi_cxx.so.1:
cannot open shared object file: No such file or directory …Run Code Online (Sandbox Code Playgroud) 我为zlib 1.2.7创建了一个新的解决方案,将其设置为静态库,添加了必要的头文件和源文件,./zlib/contrib/minizip并使其编译得很好.然后我将它与libpng(也作为一个静态库)链接,它也编译好.然后,我将libpng链接到我的图形引擎项目(也是一个静态库)......仍然没有错误.
但是一旦我将我的主项目链接到我的图形引擎,我就会收到几个关于crc32.obj,deflate.obj,inflate.obj,d3dxplane.obj,d3dxvec4.obj和其他zlib/directx相关模块的LNK2026错误.它告诉我它们来自我的图形引擎库,因此我决定通过添加/SAFESEH:NO相应项目的链接器标志来解决这个问题.
注意:我应该声明所有项目都设置为目标x86,而不是x64.
但问题是,现在我得到了:
warning LNK4044: unrecognized option '/SAFESEH'; ignored这导致我的主项目中出现了相同的LINK2026错误.
如果我打开visual studio命令提示符并键入LINK /?它,/SAFESEH则确认这是一个有效的链接器选项.我使用时得到相同的错误/SAFESEH (没有':NO'),如果我完全省略它,那么我的主项目就是拒绝构建.
这里发生了什么?我该如何解决这个问题?
我想签署我的apk,所以我执行了以下命令:
java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk~/Desktop/test.apk
但我收到以下错误:
线程"main"中的异常java.lang.UnsatisfiedLinkError:java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)的java.library.path中没有conscrypt_openjdk_jni,java.lang.Runtime.loadLibrary0(Runtime.java:870) atg.conscrypt.OpenCrypto的一个org.conscrypt.NativeCrypto的org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:25)上的java.lang.System.loadLibrary(System.java:1122).(NativeCrypto.java:54)org.conscrypt.OpenSSLBIOInputStream在org.conscrypt.OpenSSLX509Certificate.fromX509PemInputStream(OpenSSLX509Certificate.java:119)在org.conscrypt.OpenSSLX509CertificateFactory $ 1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:220)在org.conscrypt.OpenSSLX509CertificateFactory $ 1.fromX509PemInputStream(OpenSSLX509CertificateFactory.(OpenSSLBIOInputStream.java:34) .java:216)at org.conscrypt.OpenSSLX509CertificateFactory $ Parser.generateItem(OpenSSLX509CertificateFactory.java:94)at org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:272)at java .security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339)at com.android.signapk.SignApk.readPublicKey(SignApk.java:182)at com.android.signapk.SignApk.main(SignApk.java:1087)
如何解决这个错误?
(openjdk版本"1.8.0_141"OpenJDK运行时环境(版本1.8.0_141-8u141-b15-3~14.04-b15)OpenJDK 64位服务器VM(版本25.141-b15,混合模式))
linker-errors ×10
c++ ×4
xcode ×3
linker ×2
agvtool ×1
android ×1
apk ×1
arduino ×1
avr ×1
avr-gcc ×1
c ×1
gcc ×1
iphone ×1
mpi ×1
non-lazy-ptr ×1
objective-c ×1
sign ×1
visual-c++ ×1
xcode5 ×1