小编Joh*_*ohn的帖子

链接到使用GCC5编译的库时,clang中的未定义引用

我尝试使用ubuntu 15.10存储库版本的libmuparser(包libmuparser2v5).用gcc编译工作正常,但不能用clang编译.我深入研究了这个问题,提出了以下最小(非)工作示例和几个问题.

考虑一个带有一个简单类的库,它接受一个string并返回一个string.

testlib.h:

#pragma once

#include <string>

struct Test {
    std::string str;

    void set(std::string s);
    std::string get();
};
Run Code Online (Sandbox Code Playgroud)

testlib.cpp:

#include "testlib.h"

void Test::set(std::string s) {
    str = s;
}

std::string Test::get() {
    return str;
}
Run Code Online (Sandbox Code Playgroud)

这是用gcc 5.2.1编译为静态库的

g++ -Wall -c testlib.cpp -o testlib-gcc.o
ar rcs libtest-gcc.a testlib-gcc.o
Run Code Online (Sandbox Code Playgroud)

现在编译一个应用程序 main.cpp

#include <iostream>
#include "testlib.h"

int main()
{
    Test p;
    p.set("Hello!");
    std::cout << p.get() << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用clang 3.6.2-1使用

clang++ main.cpp -o out-clang …
Run Code Online (Sandbox Code Playgroud)

c++ abi clang c++11 gcc5

8
推荐指数
0
解决办法
2919
查看次数

C++ std :: vector的行为就像在特定情况下泄漏内存一样

我发现了一种情况,其中向量的行为类似于泄漏内存,并且可以将其归结为最小的工作示例.在这个例子中,我(在一个函数中)生成一个包含三个char向量的向量.首先,这些char矢量被推入大量元素,它们的容量缩小到它们的大小.然后在大矢量上分配单元素大小的矢量.现在的问题是,使用的内存太大,即使函数返回并且向量被破坏,内存也不会被释放.我如何获得回忆?为什么它显示这个bahaviour?我该怎么做才能避免这种泄漏行为?

这里是示例代码(抱歉长度):

#include <iostream>
#include <vector>
#include <string>
#include <fstream>

using namespace std;

// see http://man7.org/linux/man-pages/man5/proc.5.html at /proc/[pid]/status
string meminfo() {
    // memory information is in lines 11 - 20 of /proc/self/status
    ifstream stat_stream("/proc/self/status",ios_base::in);

    // get VmSize from line 12
    string s;
    for ( int linenum = 0; linenum < 12; ++linenum )
        getline(stat_stream,s);
    stat_stream.close();
    return s;
}

void f() {
    vector<vector<char>> mem(3); // with 1,2 memory is fine
    size_t size = 16777215;      // with 16777216 or greater …
Run Code Online (Sandbox Code Playgroud)

memory-leaks vector c++11

6
推荐指数
1
解决办法
451
查看次数

标签 统计

c++11 ×2

abi ×1

c++ ×1

clang ×1

gcc5 ×1

memory-leaks ×1

vector ×1