Articles of g ++

链接无法find符号,但库被读取并且符号存在

我一直在试图编译我的项目,我得到undefined reference错误。 例如。: installertest.cpp:(.text+0x9d1): undefined reference to `XmlRpcValue::makeArray()' … installertest.cpp:(.text+0xede): undefined reference to `dbcancel' installertest.cpp:(.text+0xefd): undefined reference to `dbfcmd' installertest.cpp:(.text+0xf0f): undefined reference to `dbsqlexec' installertest.cpp:(.text+0xf2d): undefined reference to `SHA1_Init' … 我的命令是: g++ -o installertest \ -lsybdb \ -lxmlrpc \ -lxmlrpc_cpp \ -lxmlrpc_xmlparse \ -lxmlrpc_xmltok \ -lxmlrpc_util \ -lxmlrpc++ \ -lxmlrpc_server_cgi \ -lssl \ -std=c++0x \ […]

错误:从'void *'无效转换为'void *(*)(void *)' – pthreads

anisha@linux-y3pi:~> g++ conditionVarTEST.cpp -Wall conditionVarTEST.cpp: In function 'int main()': conditionVarTEST.cpp:33:53: error: invalid conversion from 'void*' to 'void* (*)(void*)' conditionVarTEST.cpp:33:53: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)' conditionVarTEST.cpp:34:53: error: invalid conversion from 'void*' to 'void* (*)(void*)' conditionVarTEST.cpp:34:53: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)' 第33行是这样的: pthread_create […]

C ++ 11:g ++ – 4.7内部编译错误

以下代码: #include <iostream> #include <array> using namespace std; constexpr int N = 1000000; constexpr int f(int x) { return x*2; } typedef array<int, N> A; template<int… i> struct F { static constexpr A f() { return A{{ ::f(i)… }}; } }; template<class A, class B> struct C {}; template<int… i, int… j> struct C<F<i…>, F<j…>> […]

不共享与共享库的所有类

像win32一样丑陋微软编译器是通过使用__declspecmacros,它确实具有明确你想要导出或不导出的好处。 现在将相同的代码移到Linux gnu / gcc系统上意味着所有的类都被导出!(?) 这是真的吗? 有没有办法不在gcc下的共享库中导出类? #ifndef WIN32 #define __IMPEXP__ #else #undef __IMPEXP__ #ifdef __BUILDING_PULSETRACKER__ #define __IMPEXP__ __declspec(dllexport) #else #define __IMPEXP__ __declspec(dllimport) #endif // __BUILDING_PULSETRACKER__ #endif // _WIN32 class __IMPEXP__ MyClass { … }

G ++找不到boost库。 我说他们很明显

我正在尝试构build一些代码。 这是我得到的错误: main.o: In function `__static_initialization_and_destruction_0': /home/jmbeck/Downloads/boost_1_48_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()' 还有更多,但我不认为这是相关的。 这是build立命令: g++ -I/home/jmbeck/Downloads/boost_1_48_0 -L/home/jmbeck/Downloads/boost_1_48_0/stage/lib -lm -lboost_system -lboost_thread -lboost_regex main.cpp / home / jmbeck / Downloads / boost_1_48_0 / stage / lib目录包含预期的文件: libboost_system.a libboost_system.so@ libboost_system.so.1.48.0* libboost_thread.a libboost_thread.so@ libboost_thread.so.1.48.0* libboost_regex.a libboost_regex.so@ libboost_regex.so.1.48.0* … etc… 我试过build立一个不使用预编译库的快速程序,编译得很好。 它find适当的标题,但不是库。 我究竟做错了什么?

为什么用g ++代替gcc编译* .cc文件?

我编译了一个使用g ++而不是gcc的库。 首先,我认为源代码是用C ++编写的,但后来我发现在* .cc文件中没有任何C ++代码。 为了证实这一点,我用gccreplace了原始makefile中的g ++。 而且我还是得到了正确的scheme。 任何人都可以解释呢? 这不是我第一次遇到这样的情况。

Linux程序在运行时找不到共享库

我试图编译一个Linux程序,id3v2,它说它找不到合适的库: id3v2: error while loading shared libraries: libid3-3.8.so.3: cannot open shared object file: No such file or directory 我猜这是lidid3库中的一部分? 该文件存在,但是,他们正在寻找的是一个符号链接: “ibid3-3.8.so.3.0.0” 我想知道这是不是能够遵循符号链接的问题? 也许我可以手动改变它来查找0.0,如果我知道我想要改变它的位置。 我很高兴澄清任何细节。 它看起来像包括以下列方式完成: id3v2: convert.o list.o id3v2.o genre.o ${CXX} ${LDFLAGS} -pedantic -Wall -g -o $@ $^ -lz -lid3 我能够使用西蒙的build议来弄清楚,有多个地方可能会有一个图书馆。 我创build了一个链接到ACTUAL文件的符号链接。 谢谢Simon!

使用g ++的符号可见性

我在Linux / Mac下编译了一个C ++库,其中隐藏了符号。 我已经使用_ 属性 _((visibility(“hidden”)))为我所有的类和编译选项(-c -O2 -fPIC -MMD -MP -MF)。 在Mac下,使用MacDependencies(http://code.google.com/p/macdependency/),工作完成得很好,因为我只看到我的出口(我实际上看到了前后的差异)。 但是,我注意到使用nm我仍然可以看到符号的所有名称。 这发生在Mac和Linux下。 这是为什么? 有什么办法可以避免这种情况? 最好的问候和感谢,乔

gcc / g ++中__declspec(naked)的等价物

gcc / g ++中__declspec( naked )的等价物是什么? __declspec( naked )实际上用于声明一个没有任何结尾和序言的函数。

如何在双variables中检查inf(和|或)NaN

考虑下面的代码: #include <iostream> #include <cstdio> #include <cstring> using namespace std; template<class T> bool IsNaN(T t) { return t != t; } int main(int argc, char**argv) { double d1, d2; sscanf(argv[1], "%f", &d1); sscanf(argv[2], "%f", &d2); double dRes = d1/d2; cout << "dRes = " << dRes << "\n"; if(IsNaN(dRes)) cout << "Is NaN\n"; else cout […]