相关疑难解决方法(0)

429
推荐指数
8
解决办法
17万
查看次数

Linux c ++错误:对'dlopen'的未定义引用

我使用C++(Eclipse)在Linux中工作,并希望使用库.Eclipse向我显示错误:

undefined reference to 'dlopen' 
Run Code Online (Sandbox Code Playgroud)

你知道解决方案吗?

这是我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>

int main(int argc, char **argv) {
    void *handle;
    double (*desk)(char*);
    char *error;

    handle = dlopen ("/lib/CEDD_LIB.so.6", RTLD_LAZY);
    if (!handle) {
        fputs (dlerror(), stderr);
        exit(1);
    }

    desk= dlsym(handle, "Apply");

    if ((error = dlerror()) != NULL)  {
        fputs(error, stderr);
        exit(1);
    }

    dlclose(handle);
}
Run Code Online (Sandbox Code Playgroud)

c++ eclipse linux

132
推荐指数
6
解决办法
15万
查看次数

GCC可以不抱怨未定义的引用吗?

在什么情况下,GCC 在尝试调用伪造函数时不会抛出"未定义的引用"链接错误消息?

例如,GCC编译和链接此C代码的情况:

void function()
{
    made_up_function_name();
    return;
}
Run Code Online (Sandbox Code Playgroud)

...即使代码中made_up_function_name没有任何地方(不是标题,源文件,声明或任何第三方库).

GCC是否可以在某些条件下接受和编译这种代码,而无需触及实际代码?如果是这样,哪个?

谢谢.

编辑:之前没有任何声明或提及made_up_function_name.这意味着grep -R整个文件系统中的一个显示完整的单行代码.

c gcc compiler-errors compiler-warnings

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

GNU链接器中-l和-L选项的顺序是否重要?

-l选项告诉链接器搜索标准目录中的库.使用-L,我们可以指定自己的库目录进行搜索.

问题:顺序顺序是否也与-L选项有关,就像-l wrt链接器一样?

这个链接:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html没有多说-L的序列.

编辑 另外,

在默认目录之前搜索命令行中指定的目录

是来自手册页(正如Dmitry指出的那样),这是否意味着即使我指定的顺序如下:

gcc -lm hello.c -Lx
Run Code Online (Sandbox Code Playgroud)

仍然首先给出用-L指定的目录?

linker gcc ld binutils

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

gcc和math.h的奇怪行为?

我一直在尝试构建一些使用数学函数的代码(例如pow).

math.h包含,并-lm在构建期间使用该标志.

当像这样调用编译时(-lm命令开头的标志),它失败了,说有一个未定义的引用pow:

gcc -lm -O3 main.o clustering.o grassberger.o hash.o list.o mat.o metropolis.o motif_ids.o output.o permutation.o prob.o random.o results.o role.o stubs.o switches.o -o mfinder
main.o: In function `get_sn_motif_id':
main.c:(.text+0x28d): undefined reference to `pow'
Run Code Online (Sandbox Code Playgroud)

-lm国旗放在命令的末尾时,它就可以了!

gcc -O3 main.o clustering.o grassberger.o hash.o list.o mat.o metropolis.o motif_ids.o output.o permutation.o prob.o random.o results.o role.o stubs.o switches.o -o mfinder -lm
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?

c math pow

8
推荐指数
1
解决办法
2866
查看次数

当我改变g ++参数的顺序时,为什么我的程序无法链接?

可能重复:
为什么gcc中'-l'选项的顺序很重要?

我开始学习Boost单元测试框架.我有一个最小的测试套件:

#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK 
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE( test1 ) {
    BOOST_CHECK( 2 == 1 );
}
Run Code Online (Sandbox Code Playgroud)

首先我编译源代码:

g++ -c src/tests.cc -o src/tests.o
Run Code Online (Sandbox Code Playgroud)

这完成没有错误.然后我可以链接如下:

g++ -o tests src/tests.o -lboost_unit_test_framework
Run Code Online (Sandbox Code Playgroud)

这也完成没有错误.生成的二进制文件执行预期结果.但是,如果我交换了src/tests.o和的顺序-lboost_unit_test_framework,我会收到链接器错误:

g++ -o tests -lboost_unit_test_framework src/tests.o
Run Code Online (Sandbox Code Playgroud)
src/tests.o: In function `main':
tests.cc:(.text+0x29): undefined reference to `boost::unit_test::unit_test_main(bool (*)(), int, char**)'
src/tests.o: In function `test1::test_method()':
tests.cc:(.text+0x9d): undefined reference to `boost::unit_test::unit_test_log_t::set_checkpoint(boost::unit_test::basic_cstring, unsigned int, boost::unit_test::basic_cstring)'
tests.cc:(.text+0x146): undefined reference to `boost::test_tools::tt_detail::check_impl(boost::test_tools::predicate_result const&, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring, unsigned int, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, unsigned int, …

c++ linker boost compilation g++

7
推荐指数
1
解决办法
3133
查看次数

c ++包含不同的头文件,在多个源文件中具有相同的类实现

例如

class Dummy {
public:
  Dummy() { std::cout << "a.h" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)

BH

class Dummy {
public:
  Dummy() { std::cout << "b.h" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)

c.cc

#include "a.h"

void test() {
  Dummy a;
}
Run Code Online (Sandbox Code Playgroud)

d.cc

#include "b.h"

int main() {
  Dummy a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后使用命令编译源文件

g++ d.cc c.cc
Run Code Online (Sandbox Code Playgroud)

输出是

b.h
Run Code Online (Sandbox Code Playgroud)

但是有了命令

g++ c.cc d.cc
Run Code Online (Sandbox Code Playgroud)

输出是

a.h
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么没有multiple definition错误以及为什么输出取决于编译的顺序?

c++ compilation g++ one-definition-rule

7
推荐指数
1
解决办法
1150
查看次数

运行datastax的cpp-driver示例时出错

我在ubuntu14.04上运行.我能够在机器上安装datastax的cpp驱动程序.

但我无法运行任何示例

Install the project...
-- Install configuration: ""
-- Up-to-date: /usr/local/include/cassandra.h
-- Up-to-date: /usr/local/lib/libcassandra.so.0.7.0
-- Up-to-date: /usr/local/lib/libcassandra.so.0
-- Up-to-date: /usr/local/lib/libcassandra.so
-- Up-to-date: /usr/local/lib/libcassandra_static.a
root@ubuntu-cassandra:~/cpp-driver# cd -
/root/cpp-driver/examples/simple
root@ubuntu-cassandra:~/cpp-driver/examples/simple# strace -s 1024  -f -e execve  gcc -I /usr/local/include/ -L /usr/local/lib/ -lcassandra simple.c
execve("/usr/bin/gcc", ["gcc", "-I", "/usr/local/include/", "-L", "/usr/local/lib/", "-lcassandra", "simple.c"], [/* 23 vars */]) = 0
Process 30450 attached
[pid 30450] execve("/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1", ["/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1", "-quiet", "-I", "/usr/local/include/", "-imultiarch", "x86_64-linux-gnu", "simple.c", "-quiet", "-dumpbase", "simple.c", "-mtune=generic", "-march=x86-64", "-auxbase", "simple", "-fstack-protector", "-Wformat", "-Wformat-security", "-o", …
Run Code Online (Sandbox Code Playgroud)

c c++ datastax cassandra-2.0

0
推荐指数
1
解决办法
923
查看次数