由于一些奇怪的原因,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 ++中的一个错误?
使用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
到底是怎么回事?!
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位绝对地址?
我曾经使用VS2008 express和win SDK编译x64.最近重建了我的机器(升级到64位Windows 7)并安装了最新的快递.按照相同的步骤允许x64目标和我的源不再链接.无论我做什么,我总是得到:
链接:致命错误LNK1181:无法打开输入文件'kernel32.lib'
有趣的32位编译工作正常.
这是一个众所周知的问题吗?谷歌没有给我任何线索如何处理它只是几个提到相同的问题,但没有解决方案.
是否可以使用VS 2010和win 7 SDK来定位64位?
谢谢Pawel
什么错了
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)会工作,但我不能传递变量?
我正在升级我的项目以使用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是黑色的,所以我认为那里没有任何问题.它也正在对它们进行自动完成,所以我不确定为什么它在编译时没有找到它们.
有什么建议?
我正在尝试安装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) 我继续收到以下错误:
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构建项目
如何清除此错误?
我不知道为什么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) 在从同事添加一组代码后,我得到了这个输出:
./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_static在Application.mk.
NDK还有另一个库可用吗?
linker-errors ×10
c++ ×3
gcc ×2
ios ×2
xcode ×2
64-bit ×1
android ×1
android-ndk ×1
boost ×1
c ×1
cocoapods ×1
facebook ×1
flurry ×1
linux ×1
mpi ×1
relocation ×1
swift ×1
testflight ×1
visual-c++ ×1
windows ×1
x86-64 ×1