标签: undefined-reference

使用-lpthread,g ++编译器错误,"未定义引用"信号量调用,例如`sem_open'

我是posix线程库的新手,我尝试从教程中编译示例代码:

g++ -lpthread agreement.cpp -o agreement
Run Code Online (Sandbox Code Playgroud)

但是我无法编译代码并收到以下错误消息:

a3q2.cpp:(.text+0x7e): undefined reference to `sem_open'
a3q2.cpp:(.text+0xab): undefined reference to `sem_wait'
a3q2.cpp:(.text+0x290): undefined reference to `sem_post'
a3q2.cpp:(.text+0x2af): undefined reference to `sem_close'
a3q2.cpp:(.text+0x2bb): undefined reference to `sem_unlink'
collect2: ld returned 1 exit status
make: *** [a3q2_exe] Error 1
Run Code Online (Sandbox Code Playgroud)

我知道编译工作需要-lpthread,但是我可能还需要其他任何选项才能解决问题吗?如果不是我如何安装"正确的"pthread库?

谢谢你的帮助!

c++ linux multithreading system-calls undefined-reference

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

C++ 链接器错误:未定义的引用仅在优化构建时

在链接优化的目标文件时,而不是在链接未优化的目标文件时,我才会收到未定义的引用链接器错误。我不明白问题是什么或可能是什么。

这是我未优化的构建:

构建文件:../COMPASS.cpp
调用:GCC C++ 编译器
g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"COMPASS.d" -MT"COMPASS.d" -o"COMPASS.o" “../COMPASS.cpp”
完成的建筑:../COMPASS.cpp

构建文件:../PSA.cpp
调用:GCC C++ 编译器
g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"PSA.d" -MT"PSA.d" -o"PSA.o" “../PSA.cpp”
完成的建筑:../PSA.cpp

构建文件:../SAR.cpp
调用:GCC C++ 编译器
g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"SAR.d" -MT"SAR.d" -o"SAR.o" “../SAR.cpp”
完成的建筑:../SAR.cpp

构建文件:../constraints.cpp
调用:GCC C++ 编译器
g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp …

c++ linker build-process linker-errors undefined-reference

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

运行示例 CMocka 测试时“未定义对`_cmocka_run_group_tests'的引用”

我安装了CMocka 测试框架并尝试了示例代码

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
    (void) state; /* unused */
}
int main(void) {
    const struct CMUnitTest tests[] = {
            cmocka_unit_test(null_test_success),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时,出现以下错误:

$ gcc -o Tests tests.c
    /tmp/ccbwAXrr.o: In function `main':
    tests.c:(.text+0x5e): undefined reference to `_cmocka_run_group_tests'
    collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

c linker gcc undefined-reference cmocka

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

c ++"未定义引用'Foo :: Foo(std :: string)'"

我不太熟悉c ++以及实例化对象是如何工作的,所以这可能是一件非常简单的事情.当我用g ++编译时,我得到错误"未定义引用'Foo :: Foo(std :: string)'".我想创建一个类Foo的实例,它的构造函数中有一个字符串参数.这是代码:

foo.h中

#include <string>
using namespace std;

class Foo
{
    public:
        Foo(string s);

    private:
        string id;
};
Run Code Online (Sandbox Code Playgroud)

Foo.cpp中

#include <string>
#include "Foo.h"
using namespace std;

Foo::Foo(string s)
{
    id = s;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <string>
#include "Foo.h"
using namespace std;

int main()
{
    Foo foo("bar");

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

c++ undefined-reference

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

调用者程序对库类成员错误的未定义引用

其他问题在下面添加,2011年4月11日

我正在用C++开发一个跨平台的共享库DLL/Sos和测试程序集,虽然我必须能够支持C.这些库将仅作为目标代码发布,但测试程序将附带源代码我们的客户可以拥有示例代码.出于这个原因,我正在设计要在运行时加载的库,即使用dlopen()/ LoadLibraryA()进行动态链接.

我在Umbutu 10.04上使用g ++ 4.4.3-4,在Vista/64上使用VC++ 2008(在32位模式下).

一切似乎在Windows上运行得很好(现在).但是,当我在Linux上编译时,我遇到了一些我无法弄清楚的错误.

测试器和库有几个类,分别用.cpp和.h编写.除主入口点之外,库中的类和大多数内容都在命名空间DISCOVER_NS中.

以下是该项目的简要草图:

首先,承认,我缩短了一堆名称,因此代码更具可读性.

discover.cpp

  • 使用指向它的指针创建一个类对象,该对象名为DiscoverObject类型的MainObject.

  • 有一个extern"C"函数,它将theMainObject作为void*返回给调用者程序.

  • DiscoverObject有几个方法,并实例化在单独的cpp和.h中找到的其他类.一个特殊的方法名为Hello(),它可以满足您的期望,它会打印一个"hello"测试消息.


tester.cpp

  • 获取库的句柄

  • 获取返回theMainObject的函数的函数指针.

  • 执行函数(指针)并将返回的地址从void*转换为DISCOVER_NS :: DiscoverObject*aDiscoverObject.

  • 运行aDiscoverObject-> Hello().


我编译:

CC = @ g ++

gflags = -g3

cflags = -fPIC -Wall -pedantic

lib_linkflags:= -shared -fPIC -lstdc ++ -lrt -lpthread -rdynamic

tester_linkflags:= -ldl -lpthread

define = -D_ linux _ -D_DEBUG -D_IPC_ARCH_INTEL = 1 -D_THREAD_SAFE


现在,当我编译时,我得到以下错误:*Tester.cpp:142:未定义引用`Discover_NS :: DiscoverObject :: hello()'*

我还从discover.so中得到了一堆其他未定义的引用错误,例如:*discover.so:未定义引用`Discover_NS :: DeviceList :: ~DeviceList()*


我尝试在SO外部"C"中制作几乎所有东西.没有不同.

我尝试将语句放入discover.cpp,如下所示:extern void Discover_NS :: OtherClass :: method(args); 但这给了我关于"课外声明不是定义"错误的错误.


我知道这会有助于查看代码,但我需要时间来发布一些小的帖子.

谁能提出解决这个烂摊子的想法? …

c++ cross-platform shared-libraries undefined-reference

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

Ocaml代码编译,但不与顶级

我正在做一个免费课程.下面的ocaml代码在我"make"时编译,但是一旦我试图把它放到顶层就会抱怨.为什么?

let main () =
  (* Parsing arguments *)
  let f_name = ref "" in
  Arg.parse [ ] (fun s -> f_name := s) "Mini-Java analyzer";
  (* Parsing of the source file *)
  let simple_java_prog =
    if String.compare !f_name "" = 0 then failwith "no program file given";
    Localizing.current_file_name := !f_name;
    let f_desc = open_in !f_name in
    let lexbuf = Lexing.from_channel f_desc in
    let java_prog =
      try Java_parser.program Java_lexer.token lexbuf
      with
      | e ->
          Printf.printf "Exception during parsing: %s\n"
        (Printexc.to_string …
Run Code Online (Sandbox Code Playgroud)

ocaml load undefined-reference ocaml-toplevel

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

从我的CUDA代码中调用我的C函数

我有cuda代码,它调用.c文件中存在的函数,该文件的头文件已包含在我的cuda代码中.所以,总而言之,我有一个头文件,一个用于该头文件的C文件和一个CUDA代码.当我使用nvcc编译我的CUDA代码并指定我的cuda代码名称和c文件名时,我得到了我在CUDA代码中调用的函数的未定义引用,这些函数实际存在于我的C文件中.请帮助我理解我做错了什么,如何解决我的错误.

好吧我在下面粘贴我的代码...我最初没有发布它因为我认为它是链接器错误或其他什么.

 #include "dbConnection.h"
 #include "error.h"
 #include "libpq-fe.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include "appCompileSwitches.h"


int makeConnection(PGconn** conn,const char* connInfo);
void executeQuery(PGconn* conn,PGresult** res,char* statement,int* rows,int* columns);


/***************************************
* main(), enough said
****************************************/
int main(int argc, char **argv)
{

    PGconn *conn = NULL;
    PGresult *res= NULL;
    float** result;
    char* statement = "select visit_no,brand_name from visit_sample limit 3";
    int rows=0,columns=0; // WILL BE USED TO CUDAMALLOC gpu memory
    const char* connInfo = "dbname = moxy";

    if(!makeConnection(&conn,connInfo))
    {
            printf("failed to connect to Database!\n"); …
Run Code Online (Sandbox Code Playgroud)

c cuda undefined-reference

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

为什么我在Linux中编译sctp程序失败了?

首先我在Ubuntu 12.04上安装sctp
sudo apt-get install libsctp-dev lksctp-tools
然后在我的.c文件中,我包括:

#include < netinet/in.h >
#include < netinet/sctp.h >
#include < sys/socket.h >
#include < stdlib.h >
#include < unistd.h >
Run Code Online (Sandbox Code Playgroud)

howerver,当我用gcc编译时,结果是:

 undefined reference to `sctp_recvmsg'
 undefined reference to `sctp_get_no_strms'
 undefined reference to `sctp_sendmsg'
Run Code Online (Sandbox Code Playgroud)

怎么了?

linux undefined-reference sctp

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

C++未定义引用虽然函数在同一文件中定义

我目前正在尝试用C++编写OpenGL程序.当我尝试编译我的程序时,我得到了未定义的引用,我在任何地方调用我的类的成员函数,尽管我从成员函数中调用这些函数...

这些是我得到的错误消息:

make clean && make
rm -f *.o *~ main
g++   -c main.cpp  -o main.o
g++   -c renderer.cpp  -o renderer.o
g++   -o main main.o renderer.o  -lglut -lGL -lGLEW
renderer.o: In function `Renderer::resize(int, int)':
renderer.cpp:(.text+0x299): undefined reference to `Renderer::Perspective(float*, float, float, float, float)'
renderer.o: In function `Renderer::setupShaders()':
renderer.cpp:(.text+0x43d): undefined reference to `Renderer::loadShaderSrc(char const*, int&)'
renderer.cpp:(.text+0x456): undefined reference to `Renderer::loadShaderSrc(char const*, int&)'
renderer.cpp:(.text+0x4e7): undefined reference to `Renderer::printShaderInfoLog(int)'
renderer.cpp:(.text+0x4fe): undefined reference to `Renderer::printShaderInfoLog(int)'
renderer.cpp:(.text+0x568): undefined reference to `Renderer::printProgramInfoLog(int)'
collect2: Fehler: ld gab …
Run Code Online (Sandbox Code Playgroud)

c++ undefined-reference

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

perl xs模块写入 - 在同一个xs文件中使用另一个函数

我是XS的初学者,花了一些时间在网上寻找这个答案而没有运气.问题是XS更改了函数的名称,当它进行编译时,我将得到一个未定义的引用错误.例如,考虑下面的XS代码:

size_t 
matrixIndex (colIndex, rowIndex,nCols,nRows)
      size_t colIndex
      size_t rowIndex
      size_t nCols
      size_t nRows
    CODE:
    size_t register i;
    RETVAL = (rowIndex * nCols) + colIndex;
    OUTPUT:
        RETVAL
Run Code Online (Sandbox Code Playgroud)

然后我尝试在下面这样的函数中使用它

int
matrixCopyColumnVector_dbl (colIndex,fromMatrix,nColsMatrix,nRowsMatrix,intoVector,nRowsVector)
      size_t colIndex
      SV * fromMatrix
      size_t nColsMatrix
      size_t nRowsMatrix
      SV * intoVector
      size_t nRowsVector
    CODE:
      size_t register x, n;
      if( nRowsVector != nRowsMatrix) { RETVAL = 0; return RETVAL; }
      n = 0;
      for(x=0; x<= nRowsMatrix; x++) {
         intoVector[n] = fromMatrix[matrixIndex /*USE OF FUNCTION HERE!!*/(colIndex,x,nColsMatrix,nRowsMatrix)];
         n++;
      }
      RETVAL = 1; …
Run Code Online (Sandbox Code Playgroud)

c perl undefined-reference xs

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