标签: linker-errors

此代码是否已损坏或是否存在g ++中的错误?

由于一些奇怪的原因,g ++(版本4.5.0和4.5.2)无法编译此代码:

bool somefunc() {
    return false;
}

class C {
  public:
    static const int a = 0;
    static const int b = 1;
};

class myclass {
  public:
    int check() {
        return somefunc() ? C::a : C::b;
        // if(somefunc()) return C::a; else return C::b;
    }
};

int main() {
    myclass obj;
    obj.check();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

/tmp/ccyvvTUy.o:/home/mati/test.cpp:14: undefined reference to `C::a'
/tmp/ccyvvTUy.o:/home/mati/test.cpp:14: undefined reference to `C::b'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

如果我将有问题的行更改为注释行,它编译得很好,这很奇怪.我的代码是否有问题以及我对C++不了解的东西或它只是G ++中的一个错误?

c++ linker-errors

21
推荐指数
2
解决办法
566
查看次数

未定义的引用`__gxx_personality_sj0`

使用gcc 4.6尝试执行此代码时:

   #include <iostream>

using namespace std;

#include <bitset>

int main()
{
   //Int<> a;
   long long min = std::numeric_limits<int>::min();
   unsigned long long max = std::numeric_limits<int>::max();
   cout << "min: " << min << '\n';
   cout << "max: " << max << '\n';
   cout << (min <= max);
   std::bitset<64> minimal(min);
   cout << "minimal: " << minimal;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:
1.未定义引用__gxx_personality_sj
2.未定义引用_Unwind_SjLj_Register
3. undefined引用_Unwind_SjLj_Unregister
4. undefined引用_Unwind_SjLj_Resume

到底是怎么回事?!

c++ gcc linker-errors undefined-reference

21
推荐指数
3
解决办法
3万
查看次数

x86-64 Linux中不再允许32位绝对地址?

64位Linux默认使用小内存模型,它将所有代码和静态数据置于2GB地址限制之下.这可确保您可以使用32位绝对地址.较旧版本的gcc使用静态数组的32位绝对地址,以便为相对地址计算保存额外的指令.但是,这不再有效.如果我尝试在汇编中创建一个32位的绝对地址,我会收到链接器错误:"在创建共享对象时,不能使用".data"重定位R_X86_64_32S;使用-fPIC重新编译".当然,此错误消息具有误导性,因为我没有创建共享对象,-fPIC也没有帮助.到目前为止我发现的是:gcc版本4.8.5对静态数组使用32位绝对地址,gcc版本6.3.0不使用.版本5可能也没有.binutils 2.24中的链接器允许32位绝对地址,而2.28则不允许.

这种变化的后果是必须重新编译旧库并破坏传统汇编代码.

现在我想问一下:这个改变是什么时候做的?它在某处记录了吗?是否有一个链接器选项,使其接受32位绝对地址?

linux gcc x86-64 linker-errors relocation

21
推荐指数
1
解决办法
5787
查看次数

visual studio 2010 express + win sdk =无法打开输入文件'kernel32.lib'

我曾经使用VS2008 express和win SDK编译x64.最近重建了我的机器(升级到64位Windows 7)并安装了最新的快递.按照相同的步骤允许x64目标和我的源不再链接.无论我做什么,我总是得到:

链接:致命错误LNK1181:无法打开输入文件'kernel32.lib'

有趣的32位编译工作正常.

这是一个众所周知的问题吗?谷歌没有给我任何线索如何处理它只是几个提到相同的问题,但没有解决方案.

是否可以使用VS 2010和win 7 SDK来定位64位?

谢谢Pawel

windows 64-bit linker-errors visual-c++

20
推荐指数
2
解决办法
3万
查看次数

ld:对符号'log2 @@ GLIBC_2.2.5'的未定义引用

什么错了

for (level = 1; level <= log2((double)size); level++)
                         ^
Run Code Online (Sandbox Code Playgroud)

看起来像是从使用,log2()但什么是错的?我实际上正在使用它与OpenMPI代码,但注释这一行修复了一些事情.

完整来源(http://pastie.org/7559178)见第40行

[jiewmeng@JM Assign3]$ mpicc -o cpi cpi.c && mpirun -np 16 cpi
/usr/bin/ld: /tmp/cca9x4he.o: undefined reference to symbol 'log2@@GLIBC_2.2.5'
/usr/bin/ld: note: 'log2@@GLIBC_2.2.5' is defined in DSO /usr/lib/libm.so.6 so try adding it to the linker command line
/usr/lib/libm.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

似乎log2(4)会工作,但我不能传递变量?

c mpi linker-errors

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

Cocoapods - Flurry&TestFlight - 未定义的建筑符号

我正在升级我的项目以使用Cocoapods,当我尝试为iOS设备或模拟器构建项目时,我得到:

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_TestFlight", referenced from:
      objc-class-ref in PhotoPreviewViewController.o
  "_OBJC_CLASS_$_Flurry", referenced from:
      objc-class-ref in MyAppDelegate.o
      objc-class-ref in InitialSetupViewController.o
      objc-class-ref in InitialDownloadViewController.o
      objc-class-ref in HistoryViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

(当然,架构不同)

在"Link Binary With Libraries"下libPods.a是黑色的,所以我认为那里没有任何问题.它也正在对它们进行自动完成,所以我不确定为什么它在编译时没有找到它们.

有什么建议?

xcode linker-errors flurry testflight cocoapods

20
推荐指数
2
解决办法
9273
查看次数

GoogleMapsSDK:架构x86_64的未定义符号

我正在尝试安装Google maps SDK,并且在运行时遇到此错误:

Undefined symbols for architecture x86_64:
  "_CBAdvertisementDataManufacturerDataKey", referenced from:
      -[GMSx_PEBeaconScanner centralManager:didDiscoverPeripheral:advertisementData:RSSI:] in GoogleMaps(PEBeaconScanner.o)
  "_CBAdvertisementDataServiceDataKey", referenced from:
      -[GMSx_PEBeaconScanner centralManager:didDiscoverPeripheral:advertisementData:RSSI:] in GoogleMaps(PEBeaconScanner.o)
  "_CBCentralManagerScanOptionAllowDuplicatesKey", referenced from:
      -[GMSx_PEBeaconScanner scanIfAppropriate] in GoogleMaps(PEBeaconScanner.o)
  "_OBJC_CLASS_$_CBCentralManager", referenced from:
      objc-class-ref in GoogleMaps(PEBeaconScanner.o)
  "_OBJC_CLASS_$_CBUUID", referenced from:
      objc-class-ref in GoogleMaps(PEBeacon.o)
      objc-class-ref in GoogleMaps(PEBeaconScanner.o)
  "_vImageBoxConvolve_Planar8", referenced from:
      (anonymous namespace)::CreateBlurredImage(CGImage*, double, double) in GoogleMaps(GLWaterGroup.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

linker-errors undefined-symbol ios google-maps-sdk-ios

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

iOS中的链接器错误(架构x86_64的重复符号)

我继续收到以下错误:

duplicate symbol _llvm.embedded.module in:
/Users/name/Documents/FacebookSDKs-iOS-20150910/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKApplicationDelegate.o)
/Users/name/Documents/FacebookSDKs-iOS-20150910/FBSDKCoreKit.framework/FBSDKCoreKit(FBSDKServerConfiguration.o)
ld: 102 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

我已经尝试删除FBSDK并重新安装,但这没有用.我还怀疑我将框架桥接到Swift这一事实可能是个问题.我的桥接头包含以下内容:

#ifndef EggCrush_Bridge_h
#define EggCrush_Bridge_h

#import <FBSDKCoreKit/FBSDKCoreKit.h>

#endif
Run Code Online (Sandbox Code Playgroud)

我的AppDelegate.swift文件导入FBSDKCoreKit.
没有其他链接器标志.
我正在运行Xcode 6.3.2并为iOS 8.3构建项目

如何清除此错误?

xcode facebook linker-errors ios swift

20
推荐指数
2
解决办法
2万
查看次数

C++ BOOST对`boost :: filesystem :: detail :: copy_file的未定义引用

我不知道为什么boost::filesystem::copy_file要为我制造麻烦.

未定义的引用`boost :: filesystem :: detail :: copy_file

// g++ -std=c++11 test.cpp -lboost_filesystem -lboost_system -lrt -lboost_wave

#include <boost/filesystem.hpp>

int main()
{

    boost::filesystem::create_directory("aaa");
    // ok


    boost::filesystem::copy_file("f1","f2");
    // /tmp/ccNWZltB.o: In function `boost::filesystem::copy_file(boost::filesystem::path const&, boost::filesystem::path const&)':
    // test.cpp:(.text._ZN5boost10filesystem9copy_fileERKNS0_4pathES3_[_ZN5boost10filesystem9copy_fileERKNS0_4pathES3_]+0x26): undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)'
    // collect2: error: ld returned 1 exit status


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我从boost的源代码或它的帮助中得不到灵感:

  inline
  void copy_file(const path& from, const path& to,   // See ticket #2925
                 BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec)
                                       {detail::copy_file(from, to, option, &ec);} …
Run Code Online (Sandbox Code Playgroud)

c++ boost linker-errors boost-filesystem

20
推荐指数
2
解决办法
2万
查看次数

Android NDK中的链接器错误(未定义引用`__cxa_end_cleanup')

在从同事添加一组代码后,我得到了这个输出:

./obj/local/armeabi/objs/jniWrapper/native.o: In function `_Vector_base':
D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_vector.h:73: undefined reference to `__cxa_end_cleanup'
./obj/local/armeabi/objs/jniWrapper/native.o:(.ARM.extab.text._ZNSt6vectorIhSaIhEEC1ERKS1_[std::vector<unsigned char, std::allocator<unsigned char> >::vector(std::vector<unsigned char, std::allocator<unsigned char> > const&)]+0x0): undefined reference to `__gxx_personality_v0'
./obj/local/armeabi/objs/jniWrapper/native.o: In function `std::__node_alloc::deallocate(void*, unsigned int)':
D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_alloc.h:161: undefined reference to `__cxa_end_cleanup'
./obj/local/armeabi/objs/jniWrapper/native.o:(.ARM.extab.text._ZNSt4priv12_String_baseIcSaIcEED2Ev[std::priv::_String_base<char, std::allocator<char> >::~_String_base()]+0x0): undefined reference to `__gxx_personality_v0'
./obj/local/armeabi/objs/jniWrapper/native.o: In function `basic_string':
D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_string.c:643: undefined reference to `__cxa_end_cleanup'
Run Code Online (Sandbox Code Playgroud)

这是因为我无法访问正确的STL.

据我所知,只有三个,我可以从(选择stlport_static,stlport_shared,system)通过设置APP_STL := stlport_staticApplication.mk.

NDK还有另一个库可用吗?

android compiler-errors linker-errors android-ndk

19
推荐指数
1
解决办法
2万
查看次数